web-dev-qa-db-ja.com

Dockerボリュームを介してUNIXソケットを共有-権限が拒否されました

nginxウェブサーバーとボリュームを介してphp5-fpmソケットを共有しようとしています。 Fpmとnginxは異なるコンテナーで実行されており、fpmからのソケットファイルを配置する共有ボリュームを介してそれらを動作させたいのです。

2014/04/13 10:53:35 [crit] 33#0: *1 connect() to unix:/container/fpm/run/php5-fpm.sock failed (13: Permission denied) while connecting to upstream, client: 192.168.8.2, server: docker.dev, request: "GET /test.php HTTP/1.1", upstream: "fastcgi://unix:/container/fpm/run/php5-fpm.sock:", Host: "docker.dev"

権限を777に設定し、php5-fpm.socketのグループをwww-dataに変更してみました。

FpmコンテナーのDockerfile

FROM ubuntu:13.10

RUN apt-get update
RUN apt-get upgrade -y
RUN apt-get install -y php5-cli php5-common
RUN apt-get install -y php5-fpm php5-cgi

ADD ./php-fpm.conf /etc/php5/fpm/php-fpm.conf
ADD ./pool.d/www.conf /etc/php5/fpm/pool.d/www.conf
ADD ./php.ini /etc/php5/fpm/php.ini

CMD ["/usr/sbin/php5-fpm"]

NginxコンテナのDockerfile

FROM ubuntu:13.10

RUN apt-get update
RUN apt-get upgrade -y
RUN apt-get install -y nginx

ADD ./test.php /var/test/test.php
ADD ./test.html /var/test/test.html
ADD ./nginx.conf /etc/nginx/nginx.conf
ADD ./site /etc/nginx/sites-enabled/test

EXPOSE 80

CMD ["/usr/sbin/nginx"]

test.htmlにアクセスできますが、test.phpにアクセスすると、502 Bad Gatewayが表示されます。

ボリュームを介してコンテンツを共有するときに、他に権限について注意する必要があることはありますか?

18
soupdiver

異なるコンテナが異なるネットワーク名前空間にある場合、UNIXドメインソケットを介して互いに通信することはできません。これを可能にする 非公式のカーネルパッチ がありますが、それを使用する場合は自分で行います。

5
Michael Hampton

その現在の2015年で、Michaelが言及したカーネルパッチが安定版カーネルに組み込まれたと思います。私は2つのdockerコンテナーの実用的な例を持っています。1つはphp-fpmを使用し、もう1つはnginxを使用してUNIXソケットを介して互いに通信しています。

参照: https://github.com/brad-jones/conductor/tree/master/example-project

それが機能するための鍵は、ソケットのアクセス許可を開くことでした。

例:listen.mode = 0777 in / etc/php-fpm.d/www.conf

Listen.ownerとlisten.groupが何に設定されているかは問題ではないようです。ソケットは完全に無制限である必要があったと思います。なぜなら、あるコンテナー内のユーザーは、別のコンテナー内で同じ名前であっても、別のユーザーと見なされるからです。

12
Brad Jones

fpmコンテナに./test.php /var/test/test.phpを追加します

Phpが表示されるように解釈する必要がありますよね?

0
etre