Dockerでnginx, php-fpmの環境を作ったときにハマったポイント
Dockerでnginx, php-fpmを使用したとき、どうしてもPHPが動作しなかったのでメモ。
今回はDocker Composeを使用した。ディレクトリ及びファイル構成は以下の通り
nginx-php │ docker-compose.yml │ ├─nginx │ Dockerfile │ server.conf │ └─php-fpm Dockerfile index.php
docker-compse.yml
services: nginx: build: nginx/. ports: - "8080:80" links: - web web: build: php-fpm/.
nginx/Dockerfile
FROM nginx RUN sed -i 's/server_name localhost/server_name _/g' /etc/nginx/conf.d/default.conf ADD server.conf /etc/nginx/conf.d/server.conf
nginx/server.conf
server { listen 80 default_server; server_name localhost; root /var/www/html; index index.php index.html index.htm; charset utf-8; access_log off; error_log off; location / { root /var/www/html; try_files $uri $uri/ /index.php$is_args$args; } location ~ \.php$ { fastcgi_pass web:9000; fastcgi_index index.php; include fastcgi_params; fastcgi_param SCRIPT_FILENAME /var/www/html/$fastcgi_script_name; } }
php-fpm/Dockerfile
FROM php:fpm RUN sed -i 's/\[::\]/0.0.0.0/g' /usr/local/etc/php-fpm.d/zz-docker.conf COPY index.php /var/www/html
php-fpm/index.php
<?php phpinfo();
キモは
RUN sed -i 's/server_name localhost/server_name _/g' /etc/nginx/conf.d/default.conf
のところで、default.confのserver_nameを書き換えてるところ。
これを行わないとhttp://localhost:8080でアクセスした際にdefault.confの内容が優先されPHPが動作しなかった。
server.confのlistenを変えるなどでもいいかもしれないが最終的に80番ポートでlistenするにはこれがいいのではないかと。