gpt4 book ai didi

nginx docker 容器 : 502 bad gateway response

转载 作者:IT老高 更新时间:2023-10-28 12:37:46 29 4
gpt4 key购买 nike

我有一个监听 8080 端口的服务。这不是容器。

然后,我使用官方镜像创建了一个 nginx 容器:

docker run --name nginx -d -v /root/nginx/conf:/etc/nginx/conf.d -p 443:443 -p 80:80 nginx

毕竟:

# netstat -tupln | grep 443
tcp6 0 0 :::443 :::* LISTEN 3482/docker-proxy
# netstat -tupln | grep 80
tcp6 0 0 :::80 :::* LISTEN 3489/docker-proxy
tcp6 0 0 :::8080 :::* LISTEN 1009/java

Nginx 配置为:

upstream eighty {
server 127.0.0.1:8080;
}

server {
listen 80;
server_name eighty.domain.com;

location / {
proxy_pass http://eighty;
}
}

我已经检查了我可以使用 # curl http://127.0.0.1:8080

连接到此服务器
 <html><head><meta http-equiv='refresh'
content='1;url=/login?from=%2F'/><script>window.location.replace('/login?from=%2F');</script></head><body
style='background-color:white; color:white;'>
...

它似乎运行良好,但是,当我尝试使用浏览器访问时,nginx 告诉 bt 502 bad gateway response。

我发现这可能是与非容器化进程的打开和容器之间的可见性有关的问题。我可以容器稳定连接到其他非容器进程打开的端口吗?

编辑

上游{服务器 127.0.0.1:8080; }:

2016/07/13 09:06:53 [error] 5#5: *1 connect() failed (111: Connection refused) while connecting to upstream, client: 62.57.217.25, server: eighty.domain.com, request: "GET / HTTP/1.1", upstream: "http://127.0.0.1:8080/", host: "eighty.domain.com"
62.57.217.25 - - [13/Jul/2016:09:06:53 +0000] "GET / HTTP/1.1" 502 173 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:47.0) Gecko/20100101 Firefox/47.0" "-"

upstream { server 0.0.0.0:8080; 的日志}:

62.57.217.25 - - [13/Jul/2016:09:00:30 +0000] "GET / HTTP/1.1" 502 173 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:47.0) Gecko/20100101 Firefox/47.0" "-" 2016/07/13 09:00:30 [error] 5#5: *1 connect() failed (111: Connection refused) while connecting to upstream, client:
62.57.217.25, server: eighty.domain.com, request: "GET / HTTP/1.1", upstream: "http://0.0.0.0:8080/", host: "eighty.domain.com" 2016/07/13 09:00:32 [error] 5#5: *3 connect() failed (111: Connection refused) while connecting to upstream, client: 62.57.217.25, server: eighty.domain.com, request: "GET / HTTP/1.1", upstream: "http://0.0.0.0:8080/", host: "eighty.domain.com"
62.57.217.25 - - [13/Jul/2016:09:00:32 +0000] "GET / HTTP/1.1" 502 173 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:47.0) Gecko/20100101 Firefox/47.0" "-"

有什么想法吗?

最佳答案

问题

Localhost 在容器方面有点棘手。在 docker 容器中,localhost 指向容器本身。这意味着,像这样的上游:

upstream foo{
server 127.0.0.1:8080;
}

upstream foo{
server 0.0.0.0:8080;
}

您是在告诉 nginx 将您的请求传递给本地主机。但是在 docker-container 的上下文中,localhost(和相应的 ip 地址)指向容器本身:

enter image description here

通过寻址 127.0.0.1,如果您的容器不在主机网络上,您将永远无法访问您的主机。

解决方案

主机网络

您可以选择在与您的主机相同的网络上运行 nginx:

docker run --name nginx -d -v /root/nginx/conf:/etc/nginx/conf.d --net=host nginx

请注意,在这种情况下您不需要公开任何端口。

虽然您失去了 docker 网络的好处,但这仍然有效。如果您有多个容器应该通过 docker 网络进行通信,那么这种方法可能会出现问题。如果你只是想用 docker 部署 nginx,不想使用任何高级的 docker 网络功能,这种方法很好。

访问主机远程IP地址

另一种方法是重新配置您的 nginx 上游指令以通过添加其远程 IP 地址直接连接到您的主机:

upstream foo{
//insert your hosts ip here
server 192.168.99.100:8080;
}

容器现在将通过网络堆栈并正确解析您的主机:

enter image description here

如果您有 DNS 名称,您也可以使用它。确保 docker 知道您的 DNS 服务器。

关于nginx docker 容器 : 502 bad gateway response,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38346847/

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