Freigabe des Unix-Sockets über Docker-Volume - Berechtigung verweigert

18

Ich versuche, meinen php5-fpmSocket über ein Volume mit meinem nginxWebserver zu teilen . Fpm und nginx laufen in verschiedenen Containern und ich möchte, dass sie über ein freigegebenes Volume funktionieren, auf dem ich die Socket-Datei von fpm platziere.

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"

Ich habe bereits versucht, die Berechtigungen auf 777 zu setzen und die Gruppe auf php5-fpm.socketzu ändern www-data.

Dockerfile des fpm Containers

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 des Nginx-Containers

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"]

Ich kann auf das zugreifen, test.htmlaber beim Zugriff test.phperhalte ich 502 Bad Gateway.

Muss ich mich noch um Berechtigungen kümmern, wenn ich Dinge über Volumes freigebe?

suppentaucher
quelle
Wie starten Sie diese Container?
Cpuguy83
Überprüfen Sie die Berechtigungen für das enthaltende Verzeichnis .
Aryeh Leib Taurog

Antworten:

5

Verschiedene Container können nicht über UNIX-Domänensockets miteinander kommunizieren, wenn sie sich in verschiedenen Netzwerknamespaces befinden. Es gibt einen inoffiziellen Kernel-Patch , der dies ermöglicht, aber Sie sind auf sich allein gestellt, wenn Sie ihn verwenden.

Michael Hampton
quelle
12

Es ist jetzt 2015 und ich gehe davon aus, dass der von Michael erwähnte Kernel-Patch nun den Weg in den stabilen Kernel gefunden hat. Ich habe ein Arbeitsbeispiel von 2 Docker-Containern, von denen einer mit PHP-FPM und der andere mit Nginx über einen Unix-Socket miteinander kommunizieren.

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

Der Schlüssel dazu war jedoch, die Berechtigungen für den Socket zu öffnen.

ZB: listen.mode = 0777in /etc/php-fpm.d/www.conf

Es schien keine Rolle zu spielen, auf was listen.owner & listen.group eingestellt waren. Der Socket musste absolut uneingeschränkt sein, da ein Benutzer in einem Container, auch wenn er in einem anderen Container den gleichen Namen hat, immer noch als ein anderer Benutzer angesehen wird.

Brad Jones
quelle
5
Nach meiner eingeschränkten Erfahrung kann Docker keine Namenssuche für Benutzer durchführen, oder vielmehr berücksichtigt dies nicht die Containerisierungsarchitektur. Es scheint, dass die Benutzer-ID im Container alles ist, was zählt. Wenn Sie versuchen, mit eingeschränkten Berechtigungen erneut zu testen, stellen Sie sicher, dass die UIDs innerhalb und außerhalb des Containers übereinstimmen.
ThorSummoner
0

ADD ./test.php /var/test/test.php im fpm- Container

PHP muss interpretiert werden, um angezeigt zu werden, oder?

etre
quelle