Compartir socket de Unix a través del volumen de Docker: permiso denegado

18

Intento compartir mi php5-fpmsocket a través de un volumen con mi nginxservidor web. Fpm y nginx se ejecutan en diferentes contenedores y quiero que funcionen a través de un volumen compartido donde coloco el archivo de socket de 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"

Ya intenté establecer permisos en 777 y cambiar el grupo de php5-fpm.socketa www-data.

Dockerfile de contenedor 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 del contenedor 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"]

Puedo acceder al test.htmlpero al acceder test.phpobtengo 502 Bad Gateway.

¿Hay algo más que deba preocuparme por los permisos cuando comparto cosas a través de volúmenes?

sopa de sopa
fuente
¿Cómo estás comenzando estos contenedores?
cpuguy83
Verifique los permisos en el directorio que lo contiene .
Aryeh Leib Taurog

Respuestas:

5

Diferentes contenedores no pueden comunicarse entre sí a través de los sockets de dominio UNIX cuando están en diferentes espacios de nombres de red. Hay un parche de kernel no oficial que permite esto, pero usted está solo si lo usa.

Michael Hampton
fuente
12

Ahora es 2015 y supongo que el parche del núcleo que menciona Michael ahora ha llegado al núcleo estable. Tengo un ejemplo de trabajo de 2 contenedores docker, uno con php-fpm y el otro con nginx hablando entre sí a través de un socket unix.

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

Sin embargo, la clave para que funcionara era abrir los permisos en el zócalo.

Por ejemplo: listen.mode = 0777en /etc/php-fpm.d/www.conf

No parecía importar a qué grupo listen.owner & listen.group estuvieran configurados. Supongo que el socket no tenía restricciones, porque un usuario en un contenedor, incluso si tiene el mismo nombre en otro contenedor, todavía se considera un usuario diferente.

Brad Jones
fuente
55
En mi experiencia limitada, Docker no puede realizar búsquedas de nombres para los usuarios, o más bien eso no tiene en cuenta la arquitectura de contenedorización. parece que el uid del usuario en el contenedor es todo lo que importa. Si intenta probar nuevamente con permisos restringidos, asegúrese de que el UID coincida dentro y fuera del contenedor.
ThorSummoner
0

AGREGAR ./test.php /var/test/test.php en el contenedor fpm

Php debe interpretarse para que se muestre, ¿verdad?

etre
fuente