Совместное использование сокета Unix через том докера - разрешение запрещено

18

Я пытаюсь поделиться своим 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.

Есть ли еще что-то, о чем я должен заботиться о разрешениях, когда делюсь вещами через тома?

soupdiver
источник
Как вы запускаете эти контейнеры?
cpuguy83
Проверьте разрешения для содержащей директории .
Арье Лейб Таурог

Ответы:

5

Разные контейнеры не могут общаться друг с другом через доменные сокеты UNIX, когда они находятся в разных сетевых пространствах имен. Существует неофициальный патч для ядра, который позволяет это, но вы сами, если используете его.

Майкл Хэмптон
источник
12

Сейчас 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. Я полагаю, что сокет должен быть полностью неограниченным, потому что пользователь в одном контейнере, даже если у него такое же имя в другом контейнере, все еще считается другим пользователем.

Брэд джонс
источник
5
По моему ограниченному опыту, Docker не может выполнять поиск имен для пользователей, или, скорее, это не учитывает архитектуру контейнеризации. кажется, что пользовательский uid в контейнере - это все, что имеет значение. Если вы попытаетесь снова протестировать с ограниченными разрешениями, убедитесь, что UID совпадают внутри и снаружи контейнера.
ThorSummoner
0

ADD ./test.php /var/test/test.php в футов в минуту контейнер

Php должен быть интерпретирован, чтобы отображаться, верно?

Etre
источник