как подключить nginx к php-fpm используя сокет unix в докере

Вот мой докер-compose.yml

version: '2'

services:
web:
image: nginx:latest
ports:
- "8018:80"volumes:
- ./code:/code
- ./site.conf:/etc/nginx/conf.d/default.conf
- /private/var/log/nginx:/var/log/nginx
- /private/var/run/php7-fpm.sock:/var/run/php7-fpm.sock
networks:
- code-network
php:
image: php:fpm
volumes:
- ./code:/code
- ./php-fpm.conf:/usr/local/etc/php-fpm.conf
- ./www.conf:/usr/local/etc/php-fpm.d/www.conf
- /private/var/run/php7-fpm.sock:/var/run/php7-fpm.sock
networks:
- code-network

networks:
code-network:
driver: bridge

И в site.conf я пишу так fastcgi_pass unix:/var/run/php7-fpm.sock;Я также изменяю адрес прослушивания на listen = /var/run/php7-fpm.sock в www.conf.
И в моем MAC есть файл с именем php7-fpm.sock в папке / private / var / run с режимом 666

После того как я побежал docker-compose up -d, контейнеры работали успешно. Но когда я посетил HTTP: // локальный: 8018, он вернул 502. После того как я проверил журнал ошибок nginx, я обнаружил это

2017/11/01 13:08:39 [ошибка] 6 # 6: * 1 connect () к unix: /var/run/php7-fpm.sock не удалось (111: соединение отклонено) при подключении к восходящему каналу, клиенту: 172.18 .0.1, сервер: localhost, запрос: «GET / HTTP / 1.1», upstream: «fastcgi: // unix: /var/run/php7-fpm.sock:», хост: «localhost: 8018»

Кстати, прежде чем я пытался использовать режим сокета Unix. Мне удалось посетить HTTP: // локальный: 8018 с режимом TCP / IP.

4

Решение

После того как я проверю Как настроить Apache2 и PHP-FPM через сокет unix?, Я изменил свой docker-compose.yml на

version: '2'

services:
web:
image: nginx:latest
ports:
- "8018:80"volumes:
- ./code:/code
- ./site.conf:/etc/nginx/conf.d/default.conf
- /private/var/log/nginx:/var/log/nginx
- "phpsocket:/var/run"networks:
- code-network
php:
image: php:fpm
volumes:
- ./code:/code
- ./php-fpm.conf:/usr/local/etc/php-fpm.conf
- ./www.conf:/usr/local/etc/php-fpm.d/www.conf
- ./zz-docker.conf:/usr/local/etc/php-fpm.d/zz-docker.conf
- "phpsocket:/var/run"networks:
- code-network

networks:
code-network:
driver: bridge

volumes:
phpsocket:

И переопределите zz-docker.conf для

[global]
daemonize = no

[www]
listen = /var/run/php7-fpm.sock
listen.mode = 0666

Наконец, когда я посетил HTTP: // локальный: 8018, Страница phpinfo появилась!

4

Другие решения

Я думаю, что проблема в том, что вы пытаетесь поделиться томами, которые содержат ваши php7-fpm.sock

Удалить все общие тома для /private/var/run/php7-fpm.sock:/var/run/php7-fpm.sock

Вместо этого обратитесь к имени хоста сервиса из вашего файла конфигурации хоста nginx.

location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass php:9000;
}

В частности, обратите внимание php:9000 относится к порту 9000 на динамическом имени хоста, предоставленном вашей службе php, который будет разрешен для любого другого контейнера в сети.

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector