连接被拒绝:当uwsgi和nginx在不同容器中时

2024-05-17

我正在尝试设置两个 docker 容器(是的,无需 docker-compose 分开):一个带有 nginx,另一个带有带有基本 Flask 应用程序的 uwsgi。
我在 docker 内的同一网络中运行容器
我的 nginx 配置已添加/链接到已启用站点(其他均为默认值):

server {
    listen 80;
    server_name 127.0.0.1;

    location / {
        include uwsgi_params;
        uwsgi_pass 0.0.0.0:8080;
    }
}

我的 uwsgi.ini

[uwsgi]
module = app:app

master = true
processes = 2

socket = 0.0.0.0:8080

docker 中的 uwsgi 入口点看起来像

.local/bin/uwsgi --ini uwsgi.ini

容器本身运行良好 - uwsgi 接收 8080 上的请求,nginx 接收预期请求。然而,当我尝试访问 127.0.0.1 时,我收到 502 状态代码和 nginx 日志错误:

1 连接到时 connect() 失败(111:连接被拒绝) 上游,客户端:192.168.4.1,服务器:127.0.0.1,请求:“GET / HTTP/1.1”,上游:“uwsgi://0.0.0.0:8080”,主机:“127.0.0.1”

通过谷歌搜索,我找到了一种解决方案,即使用一个容器和 some_socket.sock 作为文件或使用 docker compose。显然是权限问题,但我不知道如何解决或诊断。

我使用以下命令启动容器:

docker run --network app_network --name nginx --rm -p 80:80 my_nginx
docker run --network app_network --name flaskapp --rm -p 8080:8080 my_uwsgi


EDIT

您可以简单地使用 docker 容器的主机名uwsgi_pass指令,因为两个 docker 容器都在同一子网上。

location / {
        include uwsgi_params;
        uwsgi_pass flaskapp:8080;
    }

0.0.0.0不是服务器的 IP 地址,它本质上告诉服务器托管在设备分配的每个 IP 上。

要从 nginx 连接到它,您需要使用容器的 IP 地址。

您可以使用以下命令找到运行uWsgi的容器的IP地址:

docker inspect CONTAINER_ID

其中 CONTAINER_ID 是您在其中启动 uwsgi 的容器的 ID。

从这里您可以更新 nginx 配置,如下所示:

uwsgi_pass IP_ADDRESS:8080;

其中 IP_ADDRESS 是您从上面的命令中找到的 IP_ADDRESS

您还可以使用以下选项在启动容器时设置容器的IP地址

--ip <ip>

但请注意,确保您设置的 IP 地址与分配的标准 IP 地址位于同一子网中。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

连接被拒绝:当uwsgi和nginx在不同容器中时 的相关文章

随机推荐