通过主机名在 Docker 之间进行 Ping

通过主机名在 Docker 之间进行 Ping

我想知道如何通过主机名在 Docker 容器之间进行 ping 操作。我使用network create命令创建了一个网络。我正在使用以下命令运行机器人容器:

docker run --hostname=app --net=custom container1 

docker run --hostname=web --net=custom container2

但是当我进入第一个容器时

docker exec -it name /bin/bash

然后运行 ping web,响应是

ping:web:名称或服务未知

答案1

主机名不与 docker 的内置 DNS 解析一起使用。您可以解析容器名称、服务名称(在 Compose 文件中)以及您提供的任何网络别名。所有这些值均由 docker 在容器外部控制,其中主机名可能会在容器内部在 docker 视图之外进行修改。

要使用容器名称,您只需要:

docker run --name=app --net=custom container1 

docker run --name=web --net=custom container2

或者对于网络别名,您可以尝试:

docker run --network-alias=app --net=custom container1 

docker run --network-alias=web --net=custom container2

答案2

为系统或容器提供主机名是一回事,但让它从其他系统/容器中实际解析又是另一回事。

看看Oracle 文档使docker容器相互通信。

长话短说,你可以采用以下两种方法之一:

添加运行命令的链接

对于这种方法,只需更改--hostname--name,并添加链接选项,如下所示:

docker run --name=web --net=custom container1
docker run --name=app --net=custom container2 --link web:web

这将修改第二个容器中的 hosts 文件,将主机名“web”链接到其容器的 ip。

直接更改Hosts文件

在 /etc/hosts 中,在相应的容器中添加以下行

in app container: <IP_WEB_CONTAINER>  web
in web container: <IP_APP_CONTAINER>  app

主机名现在应该可以正确解析了。

相关内容