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

18

Eu tento compartilhar meu php5-fpmsoquete através de um volume com meu nginxservidor 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.socketpara 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.htmlmas, ao acessar test.php, recebo o 502 Bad Gateway.

Preciso me preocupar com permissões ao compartilhar coisas por volumes?

mergulhador
fonte
Como você está iniciando esses contêineres?
Cpuguy83
Verifique as permissões no diretório que contém .
Aryeh Leib Taurog

Respostas:

5

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.

Michael Hampton
fonte
12

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 = 0777em /etc/php-fpm.d/www.conf

Nã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.

Brad Jones
fonte
5
Na minha experiência limitada, o estivador não é capaz de fazer pesquisas de nome para os usuários, ou melhor, isso não leva em consideração a arquitetura de contêiner. parece que o uid do usuário no contêiner é tudo o que importa. Se você tentar testar novamente com permissões restritas, verifique se o UID corresponde dentro e fora do contêiner.
9788 ThorSummoner #
0

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

Php deve ser interpretado para ser exibido, certo?

etre
fonte