Python 3.x Nginx proxy_传递给docker容器不';行不通

Python 3.x Nginx proxy_传递给docker容器不';行不通,python-3.x,docker,nginx,centos,fastapi,Python 3.x,Docker,Nginx,Centos,Fastapi,我有两个相同的docker容器在CentOS7服务器的不同端口上运行。旧版本在端口81上运行,新版本在端口8080上运行(同时检查了82,83) 当我尝试代理第二个容器并将端口从81更改为8080时,我收到nginx错误消息(HTTP/1.1 502坏网关) Nginx不在容器中。我只是在服务器上安装了它 以下是我的代理通行证设置: location / { proxy_pass http://0.0.0.0:8080/; } 以及一些附加信息: nginx

我有两个相同的docker容器在CentOS7服务器的不同端口上运行。旧版本在端口81上运行,新版本在端口8080上运行(同时检查了82,83)

当我尝试代理第二个容器并将端口从81更改为8080时,我收到nginx错误消息(HTTP/1.1 502坏网关)

Nginx不在容器中。我只是在服务器上安装了它

以下是我的代理通行证设置:

location / {
         proxy_pass http://0.0.0.0:8080/;
        }
以及一些附加信息:

nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
如果我尝试通过容器的端口直接访问容器,一切都会正常工作

curl  0.0.0.0:81
{"msg":"Phone Masks service"}
nginx版本:nginx/1.16.1

Docker版本19.03.4,内部版本9013bf583a

完整的服务器配置是相当标准的,我没有改变任何东西,除了proxy\u pass设置

server {
       listen       80 default_server;
       listen       [::]:80 default_server;
       server_name  _;
       root         /usr/share/nginx/html;

       # Load configuration files for the default server block.
       include /etc/nginx/default.d/*.conf;

       location / {
        proxy_pass http://0.0.0.0:8080/;
       }

       error_page 404 /404.html;
           location = /40x.html {
       }

       error_page 500 502 503 504 /50x.html;
           location = /50x.html {
       }
   }
用于启动容器的命令:

sudo docker run --rm -it -p 8080:8080 -e PORT="8080" api

这与SElinux有关:

setsebool -P httpd_can_network_connect true
根据:

第二个[httpd_can_network_connect]允许httpd模块和脚本与与httpd服务相关的端口建立传出连接。要查看这些端口的列表,请运行semanageport-l | grep-whttp|u port\t


既然
0.0.0.0
表示它自己,那么这个容器应该如何与另一个容器通信?您应该将流量传递到另一个容器(使用其ip/容器名称)。@emix容器彼此不交互,它们只是在不同的端口上运行。Ginx不在容器中。两个容器应该是不同版本的服务,但出于测试原因,我启动了第二个相同的容器,nginx无法在不同的端口上代理新的容器。请看,这些容器运行在同一网络中吗?不如
setsebool-P httpd\u can\u network\u connect true
它很可能与selinux相关。你检查日志了吗?@emix错误是
[crit]9478#0:*5 connect()到0.0.0.0:8080在连接到上游时失败(13:权限被拒绝)
,并且
setsebool-P httpd_can_network_connect true
帮助了我!多谢各位!现在我很好奇为什么第一个容器很好。你能不能把它作为一个答案,这样我就可以接受了?
sudo docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                            NAMES
47ef127e3e49        api                 "/start.sh"         26 minutes ago      Up 26 minutes       80/tcp, 0.0.0.0:8080->8080/tcp   infallible_borg
5d5fe891ba30        api                 "/start.sh"         7 hours ago         Up 7 hours          80/tcp, 0.0.0.0:81->81/tcp       hopeful_cerf
setsebool -P httpd_can_network_connect true