目标是:
我已经在ubuntu上运行了nginx,成功完成了任务。但是,当我在docker容器中尝试相同的操作时,每个“/ api”请求都会得到502:
2019/11/03 14:35:39 [error] 6#6: *22 connect() failed (111: Connection refused) while connecting to upstream, client: 172.17.0.1, server: 127.0.0.1, request: "GET /api/library/source/find?page=0&size=40&q=JTdCJTIycXVlcnklMjIlM0ElMjIlMjIlMkMlMjJwZXJpb2QlMjIlM0ElMjJBTlRJUVVJVFklMjIlMkMlMjJjbGFzc2lmaWNhdGlvbnMlMjIlM0ElNUIlNUQlMkMlMjJ0eXBlcyUyMiUzQSU1QiU1RCU3RA== HTTP/1.1", upstream: "http://127.0.0.1:8080/api/library/source/find?page=0&size=40&q=JTdCJTIycXVlcnklMjIlM0ElMjIlMjIlMkMlMjJwZXJpb2QlMjIlM0ElMjJBTlRJUVVJVFklMjIlMkMlMjJjbGFzc2lmaWNhdGlvbnMlMjIlM0ElNUIlNUQlMkMlMjJ0eXBlcyUyMiUzQSU1QiU1RCU3RA==", host: "localhost", referrer: "http://localhost/library/period/antiquity" 172.17.0.1 - - [03/Nov/2019:14:35:39 +0000] "GET /api/library/source/find?page=0&size=40&q=JTdCJTIycXVlcnklMjIlM0ElMjIlMjIlMkMlMjJwZXJpb2QlMjIlM0ElMjJBTlRJUVVJVFklMjIlMkMlMjJjbGFzc2lmaWNhdGlvbnMlMjIlM0ElNUIlNUQlMkMlMjJ0eXBlcyUyMiUzQSU1QiU1RCU3RA== HTTP/1.1" 502 559 "http://localhost/library/period/antiquity" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.87 Safari/537.36" "-"
'172.17.0.1'看起来很奇怪。我使用“nginx”镜像,它的/ etc / hosts文件中包含以下内容:
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.17.0.2 1a0b306a3a80
注意'172.17.0.2',而不是'172.17.0.1'。
我正在运行的Dockerfile和Nginx配置可以在这里找到:
https://github.com/ahlinist/tempvs-ui
该镜像的构建和运行方式为:
sudo docker构建-t tempvs-ui
须藤 jetty 运行-p 80:80 tempvs-ui
我究竟做错了什么?如何使Docker镜像将请求发送到localhost:8080?
最佳答案
快速解答:使用附加参数运行docker网络:
docker run -p 80:80 --network=host tempvs-ui
事实是,您的docker(主机)服务器和docker容器中的
localhost
不相同。在您当前的实现中,重定向是在docker容器内部的发生的。而您的目标应用程序在主机上运行。这就是为什么存在“连接拒绝”错误的原因。
文档:docker network,docker run network param。
关于docker - docker中的nginx无法与localhost对话,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58681224/