[Linux]Docker で Nginx と PHP の連携
公開日:2025-11-30
更新日:2025-11-30
更新日:2025-11-30
1. 概要
Docker で Nginx と PHP のコンテナを連携します。
2. test.php の作成
次のコマンドを実行してください。
コマンド
echo '<?php phpinfo();' > ~/docker_test/nginx/html/test.php3. php-fpm のコンテナの起動
コマンド
docker run -d \
--name php-fpm \
--network my-app-network \
-v ~/docker_test/nginx/html:/var/www/html \
php:8.4.14-fpm4. nginx の app.conf の修正
「Docker で Nginx のコンテナの使用」で作成した app.conf に、.php の設定を追加します。
~/docker_test/nginx/conf/app.conf
Nginx の conf で、/var/www/html 配下を参照するように調整します。
Nginx をリロード、または再起動します。
リロード後、「docker ps」で Nginx が起動していることを確認してください。
php-fpm を起動する前に Nginx を起動すると、エラーで Nginx が起動していない場合があります。
http://localhost:8080/test.php にアクセスして正常に表示されれば OK です。
もし php ファイルがそのままダウンロードされてしまう場合は、location ~ \.php$ のブロックを確認してください。
また、修正後に Nginx を再起動しても、php ファイルがダウンロードされる場合があります。
これは、ブラウザがキャッシュしてるためです。
その場合は、http://localhost:8080/test.php?a=1 のように、適当にパラメータを付けてアクセスしてください。
~/docker_test/nginx/conf/app.conf
コード
server {
listen 80;
listen [::]:80;
server_name _;
root /usr/share/nginx/html;
# added
location ~ \.php$ {
fastcgi_pass php-fpm:9000;
fastcgi_index index.php;
# ★★★★★★★★★★
# php-fpm 内のパスに合わせる
# fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SCRIPT_FILENAME /var/www/html/$fastcgi_script_name;
# ★★★★★★★★★★
include fastcgi_params;
}
# added
}
Nginx と PHP-FPM はファイルの置き場所が異なるため、Nginx の conf で、/var/www/html 配下を参照するように調整します。
Nginx をリロード、または再起動します。
コマンド
# Nginx のリロード
docker exec { コンテナID | コンテナ名 } nginx -s reload
# Nginx の再起動
docker restart { コンテナID | コンテナ名 }
リロード後、「docker ps」で Nginx が起動していることを確認してください。
php-fpm を起動する前に Nginx を起動すると、エラーで Nginx が起動していない場合があります。
http://localhost:8080/test.php にアクセスして正常に表示されれば OK です。
もし php ファイルがそのままダウンロードされてしまう場合は、location ~ \.php$ のブロックを確認してください。
また、修正後に Nginx を再起動しても、php ファイルがダウンロードされる場合があります。
これは、ブラウザがキャッシュしてるためです。
その場合は、http://localhost:8080/test.php?a=1 のように、適当にパラメータを付けてアクセスしてください。
5. エラー時の確認方法
ブラウザでアクセス後、Nginx と php-fpm のログを確認して、リクエストが来ていることを確認する。
コンテナに接続してシェルで操作する。
Nginx で実際に読み込まれている conf を確認する
コンテナには最低限のコマンドしか入っていないため、必要なパッケージをインストールする。
Nginx のコンテナの conf は、
/etc/nginx/nginx.conf
にあります。
php-fpm のコンテナの conf は、
/usr/local/etc/php-fpm.conf
/usr/local/etc/php-fpm.d/*.conf
/usr/local/etc/php-fpm.d/www.conf
にあります。
コマンド
docker logs nginx-test
docker logs php-fpm
コンテナに接続してシェルで操作する。
コマンド
docker exec -it nginx-test bash
docker exec -it php-fpm bash
Nginx で実際に読み込まれている conf を確認する
コマンド
docker exec nginx-test nginx -T
コンテナには最低限のコマンドしか入っていないため、必要なパッケージをインストールする。
コマンド
apt update # パッケージリストの更新
apt upgrade # パッケージの更新
apt install iputils-ping # ping が使えるようになる
apt install iproute2 # ip a、ss -tulnp などが使えるようになる
Nginx のコンテナの conf は、
/etc/nginx/nginx.conf
にあります。
php-fpm のコンテナの conf は、
/usr/local/etc/php-fpm.conf
/usr/local/etc/php-fpm.d/*.conf
/usr/local/etc/php-fpm.d/www.conf
にあります。

