Docker 如何在nginx'中使用容器名称解析为其IP;s上游服务器?
我在主机上运行2个Docker容器。在我的第一个容器中,我是这样开始的:Docker 如何在nginx'中使用容器名称解析为其IP;s上游服务器?,docker,nginx,Docker,Nginx,我在主机上运行2个Docker容器。在我的第一个容器中,我是这样开始的: docker run -d --name site-a -p 127.0.0.1:3000:80 nginx docker run -d --name reverse-proxy -p 80:80 nginx 这将端口80映射到主机的端口3000。它还有一个名为site-a,我想在另一个容器中使用它 然后在我的另一个容器(一个主反向代理容器)中,我将nginx的配置配置为具有指向第一个容器的上游(site-a): 然后
docker run -d --name site-a -p 127.0.0.1:3000:80 nginx
docker run -d --name reverse-proxy -p 80:80 nginx
这将端口80映射到主机的端口3000。它还有一个名为site-a
,我想在另一个容器中使用它
然后在我的另一个容器(一个主反向代理容器)中,我将nginx的配置配置为具有指向第一个容器的上游(site-a
):
然后,我以以下方式运行反向代理容器:
docker run -d --name site-a -p 127.0.0.1:3000:80 nginx
docker run -d --name reverse-proxy -p 80:80 nginx
因此,我的反向代理容器将从site-a
容器提供服务
然而,这里有两个问题:
服务器站点-a:80时,我的nginx配置中的上游不工作代码>。我怎样才能得到它
nginx是否将别名“site-a”解析为site-a
容器的IP
-p 127.0.0.1:3000:80
这是必需的吗为了使容器能够通过其名称相互访问,您需要将它们添加到同一网络中 首先使用以下命令创建网络:
docker network create my-network
然后,在运行容器时,添加--network
标志,如下所示:
docker run -d --name site-a -p 127.0.0.1:3000:80 --network my-network nginx
当然,您需要对两个容器执行相同的操作
根据您的第二个问题,只要您不想直接从主机访问站点a的容器,就不需要使用-p
标记映射主机上的端口
当然,您仍然需要在反向代理容器上使用
-p
标志以使其可访问。为了使容器通过其名称相互可访问,您需要将它们添加到同一网络
首先使用以下命令创建网络:
docker network create my-network
然后,在运行容器时,添加--network
标志,如下所示:
docker run -d --name site-a -p 127.0.0.1:3000:80 --network my-network nginx
当然,您需要对两个容器执行相同的操作
根据您的第二个问题,只要您不想直接从主机访问站点a的容器,就不需要使用-p
标记映射主机上的端口
当然,您仍然需要在反向代理容器上使用
-p
标志,以使其可访问。如果您将多个容器组合到更复杂的基础结构中,则是时候使用更复杂的技术了。基本上,您可以在docker compose和docker stack之间进行选择。Kubernetes也可能是一种选择,但它更复杂
这些技术为容器发现和内部名称解析提供了解决方案
我建议使用docker stack。除了docker之外,它没有其他要求。如果您将多个容器组合到更复杂的基础结构中,那么是时候转向更复杂的技术了。基本上,您可以在docker compose和docker stack之间进行选择。Kubernetes也可能是一种选择,但它更复杂 这些技术为容器发现和内部名称解析提供了解决方案 我建议使用docker stack。除了docker之外,它没有其他要求,而不是compose