Ich versuche, meinen php5-fpm
Socket über ein Volume mit meinem nginx
Webserver 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.socket
zu ä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.html
aber beim Zugriff test.php
erhalte ich 502 Bad Gateway.
Muss ich mich noch um Berechtigungen kümmern, wenn ich Dinge über Volumes freigebe?
Antworten:
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.
quelle
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 = 0777
in /etc/php-fpm.d/www.confEs 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.
quelle
ADD ./test.php /var/test/test.php im fpm- Container
PHP muss interpretiert werden, um angezeigt zu werden, oder?
quelle