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