如何在nginx的上游服务器中使用容器名解析其IP?

时间:2018-06-03 12:57:09

标签: docker nginx

我在主机上运行2个Docker容器。在我的第一个容器中,我这样开始:

docker run -d --name site-a -p 127.0.0.1:3000:80 nginx

这将端口80映射到主机的端口3000.它还有一个名为site-a的名称,我想在另一个容器中使用它。

然后在我的另一个容器中,它是一个主反向代理容器,我配置了nginx的配置,让上游指向第一个容器(site-a):

upstream my-site-a {
    server site-a:80;
}

然后我以这种方式运行反向代理容器:

docker run -d --name reverse-proxy -p 80:80 nginx

这样我的反向代理容器将从site-a容器中提供。

但是,这里有两个问题:

  1. 当我使用server site-a:80;时,我的nginx配置中的上游不起作用。我怎样才能得到 nginx解析别名" site-a"到site-a容器的IP?

  2. 当启动site-a container时,我在here处回答了问题 并将其绑定到主机的端口3000:-p 127.0.0.1:3000:80这是否必要?

2 个答案:

答案 0 :(得分:2)

为了使您的容器可以通过其名称互相访问,您需要将它们添加到同一网络。

首先使用此命令创建网络:

docker network create my-network

然后,在运行容器时,添加--network标志,如下所示:

docker run -d --name site-a -p 127.0.0.1:3000:80 --network my-network nginx

当然,你需要对两个容器做同样的事情。

根据您的第二个问题,只要您不想直接从主机访问-p的容器,就无需使用site-a标记在主机上映射端口。

当然,您仍需要在反向代理容器上使用-p标志,以使其可以访问。

答案 1 :(得分:0)

如果将多个容器组合到更复杂的基础架构中,则需要转向更复杂的技术。基本上你可以选择docker-compose和docker stack。 Kubernetes也可以选择,但它更复杂。

这些技术为容器发现和内部名称解析提供了解决方案。

我建议使用docker stack。而不是撰写它除了docker之外没有其他要求。

相关问题