gpt4 book ai didi

php - Nginx和PHP容器之间的Docker连接被拒绝

转载 作者:行者123 更新时间:2023-12-04 16:33:21 26 4
gpt4 key购买 nike

我正在使用从源镜像和nginx官方镜像编译的php-fpm创建集群,但是当我尝试运行phpinfo()文件时,nginx返回以下错误:

*5 connect() failed (111: Connection refused) while connecting to upstream, client: 172.18.0.1, server: localhost, request: "GET /phpinfo.php HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "127.0.0.1:8000"

docker-compose.yml文件:
version: '2'
services:
php:
restart: always
build: data/php
image: php:7.1
ports:
- "9000:9000"
expose:
- 9000
volumes:
- ./app:/usr/share/nginx/html
web:
restart: always
build: data/nginx
image: nginx:1.10.2
ports:
- "8000:80"
links:
- php
volumes:
- ./data/nginx/vhost.conf:/etc/nginx/conf.d/default.conf
- ./data/nginx/nginx.conf:/etc/nginx/nginx.conf
- ./app:/usr/share/nginx/html
- ./data/log/nginx:/var/log/nginx

我检查了主机中的9000端口,并且 netstat -an | grep :9000命令和该端口仍然有效:
tcp6       0      0 :::9000                 :::*                    OUÇA

有关更多详细信息,请参见此github存储库中的文件(带有该图像的Dockerfile):

https://github.com/mayconfsbrito/docker

最佳答案

每个容器都有自己的本地主机

Nginx和PHP在两个不同的容器中运行,因此PHP不在本地主机上运行(从Nginx的角度来看)。

由于您的PHP容器名为“php”,因此您不想连接到此容器:

fastcgi://127.0.0.1:9000

您可能希望Nginx连接到此:

fastcgi://php:9000

查看您在Github上的仓库,我相信您需要将data/nginx/vhost.conf中的 fastcgi_pass更改为:

fastcgi_pass phpserver;

并添加上游以进行匹配。 Nginx中的上游是一种定义您要指向的其他服务器的方法。您可以将其放在 server {}块的外部,而不是内部。

upstream phpserver {
server php:9000
}

这是在Nginx中定义一个名为 phpserver的上游服务器。这指向端口9000上的主机名 php。由于您的PHP容器在Docker中被命名为 php,因此您可以使用该主机名与之对话(在Docker桥接网络中)。

然后,我们告诉 fastcgi_pass它应该使用名为 phpserver的上游服务器。

仅需要在Docker外部公开端口即可使用“端口”

除非您需要从Docker外部独立连接到fastcgi/PHP,否则不需要php容器上的 ports配置。您只需要 expose即可使nginx能够内部与php通讯。

您可能需要定义一个Docker网络

最近,我注意到有时人们需要专门创建一个Docker网络来使这种情况起作用。我不确定为什么会这样,但是这就是您的处理方式。

首先,创建一个网络。选择您喜欢的任何名称,在下面的示例中,我将使用 myapp

docker network create myapp

您现在应该在 docker network ls中看到这个新网络:

$ docker network ls
NETWORK ID NAME DRIVER SCOPE
c39b88eb8450 bridge bridge local
175efb89adef docker_default bridge local
b34434cc8b1c myapp bridge local

接下来,告诉docker-compose使用此网络。将此块添加到docker-compose.yml文件的底部。它位于YAML的最高级别,这意味着它应该从左边缘开始,而不是缩进。

networks:
default:
external:
name: myapp

执行完此操作后,您将要停止容器并重新启动,以便它们能够提取更改。您无需进行重建即可更改网络配置。

关于php - Nginx和PHP容器之间的Docker连接被拒绝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41573884/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com