J'essaie de partager ma php5-fpm
socket via un volume avec mon nginx
serveur web. Fpm et nginx s'exécutent dans des conteneurs différents et je veux les faire fonctionner via un volume partagé où je place le fichier 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"
J'ai déjà essayé de définir des autorisations sur 777 et de changer le groupe de php5-fpm.socket
en www-data
.
Dockerfile du conteneur 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 du conteneur 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"]
Je peux accéder au test.html
mais en accédant test.php
j'obtiens 502 Bad Gateway.
Y a-t-il autre chose que je dois faire attention aux autorisations lors du partage de trucs via des volumes?
Réponses:
Différents conteneurs ne peuvent pas communiquer entre eux via des sockets de domaine UNIX lorsqu'ils se trouvent dans des espaces de noms de réseau différents. Il existe un correctif non officiel du noyau qui permet cela, mais vous êtes seul si vous l'utilisez.
la source
C'est maintenant 2015 et je suppose que le correctif du noyau que Michael mentionne a maintenant fait son chemin dans le noyau stable. J'ai un exemple de travail de 2 conteneurs docker, l'un avec php-fpm et l'autre avec nginx qui se parlent via une socket Unix.
Voir: https://github.com/brad-jones/conductor/tree/master/example-project
La clé pour que cela fonctionne était d'ouvrir les autorisations sur le socket.
Par exemple:
listen.mode = 0777
dans /etc/php-fpm.d/www.confCela ne semblait pas avoir d'importance à ce que listen.owner et listen.group étaient configurés. Le socket devait être complètement libre, je suppose parce qu'un utilisateur dans un conteneur, même s'il porte le même nom dans un autre conteneur, est toujours considéré comme un utilisateur différent.
la source
ADD ./test.php /var/test/test.php dans le conteneur fpm
Php doit être interprété pour être affiché, non?
la source