Eu tento compartilhar meu php5-fpm
soquete através de um volume com meu nginx
servidor web. O Fpm e o nginx estão sendo executados em diferentes contêineres e eu quero que eles funcionem através de um volume compartilhado onde eu coloco o arquivo de soquete do 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"
Eu já tentei definir permissões para 777 e alterar o grupo de php5-fpm.socket
para www-data
.
Dockerfile do contêiner fpm
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"]
Dockerfile do contêiner nginx
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"]
Posso acessar o test.html
mas, ao acessar test.php
, recebo o 502 Bad Gateway.
Preciso me preocupar com permissões ao compartilhar coisas por volumes?
Respostas:
Contêineres diferentes não podem se comunicar por meio de soquetes de domínio UNIX quando estão em espaços de nomes de rede diferentes. Existe um patch não oficial do kernel que permite isso, mas você estará por conta própria se o usar.
fonte
Agora é 2015 e eu assumo que o patch do kernel mencionado por Michael já entrou no kernel estável. Eu tenho um exemplo de trabalho de 2 recipientes docker, um com php-fpm e outro com nginx conversando através de um soquete unix.
Consulte: https://github.com/brad-jones/conductor/tree/master/example-project
A chave para isso funcionar era abrir as permissões no soquete.
Por exemplo:
listen.mode = 0777
em /etc/php-fpm.d/www.confNão parecia importar em que grupo listen.owner & listen.group estava definido. O soquete precisava ser completamente irrestrito, acho que porque um usuário em um contêiner, mesmo que tenha o mesmo nome em outro contêiner, ainda é considerado um usuário diferente.
fonte
ADD ./test.php /var/test/test.php no contêiner fpm
Php deve ser interpretado para ser exibido, certo?
fonte