概要
Docker上でnginxコンテナを立ち上げ、ホストマシン上でLet’s Encryptで生成したSSL証明書を適用しようとした際に、以下のエラーが発生
[emerg] cannot load certificate key "/etc/nginx/conf.d/privkey.pem": PEM_read_bio_PrivateKey() failed (SSL: error:1E08010C:DECODER routines::unsupported:No supported data to decode. Input type: PEM)
これに気づいたのは、
docker compose up -d したが、
docker compose exec web したら、
「service “web” is not running」と表示され、
docker ps -a してみたら、
「[なんかID] web “/docker-entrypoint.…” 2 minutes ago Exited (1) 2 minutes」
となっていたため、
docker logs [なんかID]したら、上記エラーが出ていたことが判明したことによる。
原因
作った.pemファイルのパーミッションが原因だった。
解決のステップ
ファイルの存在確認
まずは証明書と秘密鍵が正しいディレクトリに存在しているかを確認。
ファイルの形式確認
次に、証明書ファイルが正しいPEM形式であるかを確認。
ファイルのパーミッション確認
エラーメッセージから、問題が秘密鍵ファイルの読み込みに関連していることが判明。
そのため、ファイルのパーミッションが正しく設定されているか確認。
パーミッションの修正
パーミッションが問題であることが判明したため、以下のコマンドで修正。
sudo chmod 777 ./*.pem
↑ホストマシン上で行なった上で、Docker内にCOPYするようにした。
注意点
上記のコマンドはすべてのユーザーに対して読み書き実行権限を与えるため、セキュリティ上のリスクがあります。本番環境では、適切なパーミッション設定を検討してください。
コメント