如何使用docker中的unix套接字将nginx连接到php-fpm

有我的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 - /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; 我还在www.conf中将listen地址更改为listen = /var/run/php7-fpm.sock 。 而在我的MAC中,有一个名为php7-fpm.sock的文件夹在文件夹/ p​​rivate / var / run中,模式为666

运行docker-compose up -d ,容器运行成功。但是当我访问http:// localhost:8018时 ,它返回了502.在检查了nginx错误日志之后,我发现了这个

2017/11/01 13:08:39 [错误] 6#6:* 1连接()到unix:/var/run/php7-fpm.sock失败(111:连接被拒绝),当连接到上游时,客户端:172.18 .0.1,server:localhost,请求:“GET / HTTP / 1.1”,上游:“fastcgi:// unix:/var/run/php7-fpm.sock:”,主机:“localhost:8018”

顺便说一句,在我尝试使用unix套接字模式之前。 我成功通过tcp / ip模式访问http:// localhost:8018 。

我认为问题是你试图共享包含你的php7-fpm.sock

删除/private/var/run/php7-fpm.sock:/var/run/php7-fpm.sock所有共享卷

而是从您的nginx主机configuration文件中引用服务主机名。

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

特别是,注意php:9000指的是端口9000上的dynamic主机名给你的PHP服务,这将被parsing到networking中的其他容器。

在检查了如何通过unix套接字设置Apache2和PHP-FPM之后? ,我把我的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:// localhost:8018时 ,phpinfo页面出现了!