PHPの公式DockerイメージでnginxとUNIXソケット通信をしようとしてハマりました。

現象


ソケット通信したくて下記のようなwww.confを書いて、このファイルをPHPのイメージ作成時にCOPYしていたんですね。

1
2
3
4
5
6
7
[www]
user = www-data
group = www-data
listen = /var/run/php-fpm/php-fpm.sock
listen.owner = www-data
listen.group = www-data
listen.mode = 0666

しかし、コンテナを起動しても一向にphp-fpm.sockファイルができないんですよ!!

原因


原因なんですけど、下記の記事に書いてある通りです。

docker-compose を使って(なるべく)公式イメージで PHP 開発環境を作った

この記事のPHPの欄に下記の記述があります。

fpm の設定ファイルを zzz-www.conf としていますが、これは 公式イメージが zz-docker.conf で listen 設定をぶっ潰しているのに対抗するためです。

このコメントの場所をGitHubで見たのが下記です。

普段PHPで仕事しておきながら、恥ずかしいことにconfファイルが後のファイル名で上書きされるというのは知らなかったのですが、これのせいで私が記述したlisten = /var/run/php-fpm/php-fpm.sockがファイル名的に後であるzz-docker.conf内に記述されているlisten = [::]:9000で上書きされていたようです。

対抗策


前述の記事の通り、コピーする際にzzz-docker.confという名前にしてCOPYするようにしました。具体的にはPHPのDockerfile内で下記のような記述を行いました。

1
2
3
4
5
6
FROM php:7.1.2-fpm

MAINTAINER YoshinoriN

COPY ./conf/www.conf /usr/local/etc/php-fpm.d/zzz-www.conf
...以下略

その他


これね~結構前のIssueでも上がってます。これのトラップに数時間ハマったのですが、ちょっとなんとかしてくださいよ~。確かに、起動したコンテナに入って確認したときに変なconfファイルがあるな~とは思ったんですよ。その時点で後勝ちするというのを知らなかった私も悪いっちゃ悪いんですが、もうちょっと何とかできるでしょ~。公式のイメージがこんなんでいいんすか??