nginx docker container:502错误的网关响应
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了nginx docker container:502错误的网关响应,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3408字,纯文字阅读大概需要5分钟。
内容图文
我有一个服务,听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错误的网关响应.
我发现它可能是一个与非容器化过程和容器之间的可见性相关的问题.我可以将容器与其他非容器进程打开的端口建立连接吗?
编辑
上游的日志{server 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" "-"
上游的日志{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地址)指向容器本身:
通过寻址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;
}
容器现在将通过网络堆栈并正确解析主机:
如果您有DNS名称,也可以使用DNS名称.确保docker知道您的DNS服务器.
内容总结
以上是互联网集市为您收集整理的nginx docker container:502错误的网关响应全部内容,希望文章能够帮你解决nginx docker container:502错误的网关响应所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。