gpt4 book ai didi

docker - Docker-让新容器与预先运行的容器通信

转载 作者:行者123 更新时间:2023-12-02 21:19:56 26 4
gpt4 key购买 nike

我正在尝试在一对Docker容器之间建立一些非常简单的网络,到目前为止,我所看到的所有文档都比我想做的要复杂得多。

我的用例很简单:

容器1已在运行,并且正在侦听端口28016
容器2将在容器1之后启动,并且需要在端口28016上连接到容器1。

我知道我可以轻松地通过Docker-Compose进行设置,但是Container 1是长期存在的,对于这种用例,我不想将其关闭。容器2需要启动并通过端口28016自动连接到容器1。而且,两个容器都在同一台计算机上运行。我不知道该怎么做。

我已经在容器1的dockerfile中公开了28016,并使用-p 28016:28016运行它。要使容器2连接到容器1,我需要做什么?

最佳答案

有几种解决方法。大多数不要求您发布端口。

使用用户定义的网络

如果您在用户定义的网络中启动长期运行的容器,则docker将处理

docker network create service-network
docker run --net=service-network --name Container1 service-image

如果您随后在同一网络中启动临时容器,它将能够通过名称引用长期运行的容器。例如:
docker run --name Container2 --net=service-network ephemeral-image

使用现有的容器网络 namespace

您可以只在长期运行的容器的网络 namespace 内运行临时容器:
docker run --name Container2 --net=container:Container1 ephemeral-image

在这种情况下,可以通过 localhost:28016获得该服务。

在主机上访问服务

由于您已经使用 -p 28016:28016在主机上发布了服务,因此可以使用主机的地址引用该访问,主机的地址将从容器内部成为默认网关。您可以通过以下方式获得该信息:
address=$(ip route | awk '$1 == "default" {print $3}')

您的服务将在 ${address}:28016上可用。

关于docker - Docker-让新容器与预先运行的容器通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46977959/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com