Спільний доступ до сокету unix через ток docker - у дозволі відмовлено


18

Я намагаюся поділитися моїм php5-fpmсокетом через об'єм зі своїм nginxвеб-сервером. Fpm і nginx працюють у різних контейнерах, і я хочу, щоб вони працювали через спільний том, куди я розміщую файл socket від 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.

Докерфайл контейнера 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"]

Докерфайл контейнера 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.

Чи є ще щось, про що я повинен дбати про дозволи, коли ділитися вмістом через томи?


Як ви запускаєте ці контейнери?
cpuguy83

Перевірте дозволи на каталог, що містить .
Aryeh Leib Taurog

Відповіді:


5

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


12

Її зараз 2015 рік, і я припускаю, що патч ядра, про який згадує Майкл, зробив шлях до стабільного ядра. У мене є робочий приклад 2-х докерних контейнерів, один з php-fpm, а другий з nginx, що розмовляють між собою через unix-сокет.

Дивіться: https://github.com/brad-jones/conductor/tree/master/example-project

Ключовим моментом для цього було відкриття дозволів на розетку.

Напр .: listen.mode = 0777у /etc/php-fpm.d/www.conf

Здавалося, неважливо, на що було встановлено прослуховування. Я думаю, що сокет повинен бути абсолютно необмеженим, тому що користувач в одному контейнері, навіть якщо він має таке ж ім'я в іншому контейнері, все ще вважається іншим користувачем.


5
За моїм обмеженим досвідом докер не в змозі робити пошук імен для користувачів, а точніше, що не враховує архітектуру контейнерів. здається, що uid користувача в контейнері - це все, що має значення. Якщо ви спробуєте повторно протестувати з обмеженими дозволами, переконайтеся, що UID відповідає контейнеру всередині та зовні контейнера.
ThorSummoner

0

ADD ./test.php /var/test/test.php в контейнері fpm

Php потрібно інтерпретувати, щоб відобразити, правда?

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.