Berbagi soket unix melalui volume buruh pelabuhan - izin ditolak

18

Saya mencoba berbagi php5-fpmsoket saya melalui volume dengan nginxserver web saya . Fpm dan nginx berjalan dalam wadah yang berbeda dan saya ingin membuatnya bekerja melalui volume bersama di mana saya menempatkan file socket dari 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"

Saya sudah mencoba mengatur izin ke 777 dan mengubah grup php5-fpm.socketmenjadi www-data.

Dockerfile dari wadah 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 dari wadah 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"]

Saya bisa mengakses test.htmltetapi ketika mengakses test.phpsaya mendapatkan 502 Gateway Buruk.

Apakah ada hal lain yang harus saya perhatikan tentang izin saat berbagi barang melalui volume?

supdiver
sumber
Bagaimana Anda memulai wadah ini?
cpuguy83
Periksa izin pada direktori yang berisi .
Aryeh Leib Taurog

Jawaban:

5

Wadah yang berbeda tidak dapat berbicara satu sama lain melalui soket domain UNIX saat berada di ruang nama jaringan yang berbeda. Ada tambalan kernel tidak resmi yang memungkinkan ini, tetapi Anda melakukannya sendiri jika Anda menggunakannya.

Michael Hampton
sumber
12

Sekarang di tahun 2015 dan saya berasumsi patch kernel yang disebutkan Michael sekarang telah mencapai kernel stabil. Saya punya contoh kerja 2 kontainer buruh pelabuhan satu dengan php-fpm dan yang lainnya dengan nginx berbicara satu sama lain melalui soket unix.

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

Kunci untuk itu berfungsi adalah membuka izin pada soket.

Misalnya: listen.mode = 0777di /etc/php-fpm.d/www.conf

Tampaknya tidak masalah apa yang didengarkan. Pemilik & Dengar. Grup diatur ke. Soket harus benar-benar tidak dibatasi, saya kira karena pengguna dalam satu wadah, bahkan jika memiliki nama yang sama di wadah lain masih dianggap pengguna yang berbeda.

Brad Jones
sumber
5
Dalam pengalaman saya yang terbatas, buruh pelabuhan tidak dapat melakukan pencarian nama untuk pengguna, atau lebih tepatnya itu tidak menjadi faktor dalam arsitektur containerization. tampaknya uid pengguna dalam wadah adalah yang terpenting. Jika Anda mencoba menguji lagi dengan izin terbatas, pastikan kecocokan UID di dalam dan di luar wadah.
ThorSummoner
0

TAMBAH ./test.php /var/test/test.php dalam wadah fpm

Php harus ditafsirkan untuk ditampilkan, bukan?

etre
sumber