Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Docker 如何在nginx'中使用容器名称解析为其IP;s上游服务器?_Docker_Nginx - Fatal编程技术网

Docker 如何在nginx'中使用容器名称解析为其IP;s上游服务器?

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): 然后

我在主机上运行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
因此,我的反向代理容器将从
site-a
容器提供服务

然而,这里有两个问题:

  • 当我使用
    服务器站点-a:80时,我的nginx配置中的上游不工作。我怎样才能得到它
    nginx是否将别名“site-a”解析为
    site-a
    容器的IP

  • 当启动site-a容器时,我在 并使用以下命令将其绑定到主机的端口3000:
    -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