Partage de socket Unix via le volume Docker - autorisation refusée

18

J'essaie de partager ma php5-fpmsocket via un volume avec mon nginxserveur 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.socketen 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.htmlmais en accédant test.phpj'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?

plongeur
la source
Comment démarrez-vous ces conteneurs?
cpuguy83
Vérifiez les autorisations sur le répertoire conteneur .
Aryeh Leib Taurog

Réponses:

5

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.

Michael Hampton
la source
12

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

Cela 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.

Brad Jones
la source
5
Dans mon expérience limitée, le docker n'est pas en mesure de rechercher des noms pour les utilisateurs, ou plutôt cela ne prend pas en compte l'architecture de conteneurisation. il semble que le uid de l'utilisateur dans le conteneur soit tout ce qui compte. Si vous essayez de tester à nouveau avec des autorisations restreintes, assurez-vous que la correspondance de l'UID à l'intérieur et à l'extérieur du conteneur.
ThorSummoner
0

ADD ./test.php /var/test/test.php dans le conteneur fpm

Php doit être interprété pour être affiché, non?

etre
la source