我尝试php5-fpm
通过卷与我的nginx
Web 服务器共享套接字。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。
通过卷共享内容时,还有什么需要关心的权限吗?
答案1
当不同的容器位于不同的网络命名空间中时,它们无法通过 UNIX 域套接字相互通信。非官方内核补丁允许这样做,但如果你使用它,就得自己承担责任。
答案2
现在是 2015 年,我认为 Michael 提到的内核补丁已经进入稳定内核。我有一个工作示例,其中有两个 docker 容器,一个带有 php-fpm,另一个带有 nginx,它们通过 unix 套接字相互通信。
看:https://github.com/brad-jones/conductor/tree/master/example-project
但其工作的关键是打开套接字上的权限。
例如:listen.mode = 0777
在/etc/php-fpm.d/www.conf
listen.owner 和 listen.group 的设置似乎并不重要。套接字需要完全不受限制,我猜是因为一个容器中的用户,即使在另一个容器中具有相同的名称,仍被视为不同的用户。
答案3
在 /var/test/test.php 中添加 ./test.php /var/test/test.php平均流量容器
php必须解释执行才能显示吧?