Compartilhando o soquete unix via volume docker - permissão negada

18

Eu tento compartilhar meu soquete php5-fpm por meio de um volume com meu nginx webserver. O Fpm e o nginx estão sendo executados em contêineres diferentes e quero que eles funcionem por meio de um volume compartilhado, onde 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 configurar permissões para o 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"]

Eu posso acessar o test.html , mas ao acessar o test.php recebo o 502 Bad Gateway.

Há mais alguma coisa em que eu tenha que me importar com permissões ao compartilhar coisas por meio de volumes?

    
por soupdiver 13.04.2014 / 13:08

3 respostas

5

Contêineres diferentes não podem se comunicar por meio de soquetes de domínio UNIX quando estão em namespaces de rede diferentes. Existe um patch não oficial do kernel que permite isso, mas você está por conta própria, se você usá-lo.

    
por 13.04.2014 / 16:42
12

Agora é 2015 e eu assumo que o patch do kernel que o Michael mencionou agora entrou no kernel estável. Eu tenho um exemplo de trabalho de dois contêineres docker um com php-fpm e outro com nginx falando um com o outro através de um soquete unix.

Veja: link

A chave para isso foi abrir as permissões no socket.

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

Não parecia importar o que ouvir.próprio & listen.group foram definidos para. O socket precisava ser completamente irrestrito, eu acho, porque um usuário em um container, mesmo que tenha o mesmo nome em outro container, ainda é considerado um usuário diferente.

    
por 27.03.2015 / 08:35
0

ADD ./test.php /var/test/test.php no contêiner fpm

Php deve ser interpretado para ser exibido, certo?

    
por 01.02.2017 / 21:24