Docker を使っていても「ローカルでは動くのに本番で動かない」は起きます。自分がハマったパターンをメモとして残しておきます。
環境変数が読まれていなかった
開発環境では .env を docker compose が自動で読みますが、CI/CD 経由でデプロイしたときに .env が存在せず環境変数が空になっていました。エラーメッセージが出ないまま動かない状態で、原因の特定に時間がかかりました。
今は GitHub Actions の Secrets で渡して、.env ファイルに頼らない構成にしています。
ボリュームのパーミッションで詰まった
Mac(APFS)ではパーミッションが緩く、Linux の本番サーバーでは厳密なので、コンテナ内のユーザー ID とホスト側のファイルオーナーが一致していないと「Permission denied」が出ます。Dockerfile で USER を明示するか、起動スクリプトで chown するかで解決しました。
ログが出ていなかった
アプリがログをファイルに書き出していて docker logs に出ていなかったことがありました。Docker は標準出力・標準エラーを拾うので、ログ出力を stdout/stderr に向ける設定が必要です。これをやっていないと、障害時に何が起きたかわかりません。