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するにはこれがいいのではないかと。

Follow me!

コメントを残す

メールアドレスが公開されることはありません。