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


18

php5-fpmボリュームを介してソケットをnginxWebサーバーと共有しようとしています。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を取得します。

ボリュームを介してコンテンツを共有する際に、アクセス許可に注意する必要があるものは他にありますか?


これらのコンテナはどのように起動しますか?
cpuguy83 14

回答:



12

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

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

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

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

listen.ownerとlisten.groupの設定は重要ではないようです。ソケットは完全に無制限である必要がありました。あるコンテナのユーザーは、たとえ別のコンテナに同じ名前を持っていたとしても、別のユーザーと見なされるためです。


5
私の限られた経験では、Dockerはユーザーの名前検索を行うことができません。あるいは、コンテナ化アーキテクチャを考慮していません。コンテナ内のユーザーのuidだけが重要なようです。制限されたアクセス許可で再度テストする場合は、コンテナの内部と外部でUIDが一致していることを確認してください。
ThorSummoner

0

で./test.php /var/test/test.phpを追加FPMのコンテナ

PHPは表示されるように解釈する必要がありますか?

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.