【发布时间】:2020-10-20 05:48:20
【问题描述】:
我有两个 docker 容器。一个运行 Kestrel (172.17.0.3),另一个运行 Nginx (172.17.0.4),使用反向代理连接到 Kestrel。当我使用 Kestrel 容器的内部 Docker ip 时,Nginx 连接正常,但是当我尝试使用 nginx.conf(kestral)中容器的主机名连接到 Kestrel 时,出现以下错误:
2020/06/30 00:23:03 [emerg] 58#58: 在 /etc/nginx/nginx.conf:7 的上游“kestrel”中找不到主机 nginx:在 /etc/nginx/nginx.conf:7 的上游“kestrel”中找不到 [emerg] 主机
我用这两行启动了容器
docker run -d --name kestrel --restart always -h kestrel mykestrelimage
docker run -d --name nginx --restart always -p 80:80 -h nginx mynginximage
下面是我的 nginx.conf 文件。
http {
# I've tried with and without line below that I found on Stackoverflow
resolver 127.0.0.11 ipv6=off;
server {
listen 80;
location / {
# lines below don't work
# proxy_pass http//kestrel:80;
# proxy_pass http//kestrel
# proxy_pass http//kestrel:80/;
# proxy_pass http//kestrel/;
# when I put internal docker ip of Kestrel server works fine
proxy_pass http://172.17.0.3:80/;
}
}
}
events {
}
【问题讨论】:
-
很可能它们位于不同的 docker 网络上,因为您没有说明是否将它们放在同一个 docker 网络上。
-
Docker 不是默认将所有内容放在同一个内部网络上吗? (两者似乎都在 172.17.0.x 上)
-
docker network connect 声明“一旦连接,容器就可以与同一网络中的其他容器通信。”
-
kestral 容器仅在 docker 的内部网络上。 nginx 容器位于 docker 内部和公共网络上。我尝试在 nginx.conf 中将 dns 服务器设置为 127.0.0.11,以防万一这是它无法解析主机名的原因,但它似乎没有任何效果。 (我可以从 nginx 容器内 ping kestral 的 ip,但无法 ping 主机名)
-
根据文档“一旦连接到网络,容器只能使用另一个容器的 IP 地址或名称进行通信。”
标签: docker nginx kestrel-http-server