Я пытаюсь поделиться своим php5-fpm
сокет через том с моим nginx
веб сервер. Fpm и nginx работают в разных контейнерах, и я хочу, чтобы они работали через общий том, куда я помещаю файл сокета из 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"
Я уже пробовал установить разрешения на 777 и изменить группу php5-fpm.socket
к www-data
.
Dockerfile контейнера 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 контейнера 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"]
Я могу получить доступ к test.html
но при доступе test.php
Я получаю 502 Bad Gateway.
Есть ли что-нибудь еще, что мне нужно заботиться о разрешениях при совместном использовании материалов через тома?
Сейчас 2015 год, и я полагаю, что исправление ядра, о котором упоминает Майкл, теперь вошло в стабильное ядро. У меня есть рабочий пример двух докер-контейнеров, один с php-fpm, а другой с nginx, которые разговаривают друг с другом через сокет unix.
Видеть: https://github.com/brad-jones/conductor/tree/master/example-project
Ключом к его работе было открытие разрешений для сокета.
Например: listen.mode = 0777
в /etc/php-fpm.d/www.conf
Похоже, не имело значения, какие настройки были установлены для listen.owner и listen.group. Сокет должен быть полностью неограниченным, я полагаю, потому что пользователь в одном контейнере, даже если он имеет то же имя в другом контейнере, по-прежнему считается другим пользователем.
Различные контейнеры не могут взаимодействовать друг с другом через сокеты домена UNIX, когда они находятся в разных сетевых пространствах имен. Есть неофициальный патч ядра это позволяет, но вы сами по себе, если используете его.
ДОБАВИТЬ ./test.php /var/test/test.php в fpm контейнер
Php должен быть интерпретирован, чтобы отображаться, верно?