有可能在已经运行的容器的网络中启动一个新的Docker容器吗



我可以从命令行在已经运行的容器的同一网络中启动一个新的Docker容器吗?

原始容器未使用定义的网络运行(没有--network参数(。

下面是一个我希望发生的事情的例子:

# Start a 1st container named host1.
$ docker run --name host1 -dit alpine ash
…
# Start a 2nd container and open a shell.
$ docker run -it --rm alpine
# Try to ping the 1st container from inside the 2nd container.
/ ~ ping host1
ping: bad address 'host1'

如何更改第二个命令以使第二个容器看到host1

我可以从命令行启动一个新的Docker容器吗已经在运行的容器的网络?

是。实际上,在您的示例中,您可能已经在这么做了:您在默认的bridge网络中创建了两个容器——尽管您没有指定--network,Docker还是在这个默认网络中创建它们。

您不能使用host1主机名从第二个容器访问第一个容器,因为默认bridge网络中的DNS解析不会解析此默认网络中容器的主机名。(它将在使用--network指定的非默认网络中工作,因为DNS解析不同(

然而,你可以通过它的IP直接访问它,例如:

# Start a 1st container named host1.
$ docker run --name host1 -dit alpine ash
# Get host1 IP
$ docker inspect host1 --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}'
172.17.0.2
# Start a 2nd container and open a shell.
$ docker run -it --rm alpine
# Try to ping the 1st container from inside the 2nd container.
# Won't work with hostname
/ ~ ping host1
ping: bad address 'host1'
# Will work with IP
/ ~ ping 172.17.0.2
PING 172.17.0.2 (172.17.0.2): 56 data bytes
64 bytes from 172.17.0.2: seq=0 ttl=64 time=0.322 ms
...

看起来,您真正想要的是通过默认bridge网络中的主机名来联系容器。您的问题可能会重新表述为

我可以在默认bridge网络中启动一个容器,并从同一网络中的另一个容器解析其主机名吗

您可以使用--add-host指定host1IP,例如:

$ docker run -it --rm 
--add-host host1:$(docker inspect host1 --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}') 
alpine
/ ~ ping host1
PING host1 (172.17.0.2): 56 data bytes
64 bytes from 172.17.0.2: seq=0 ttl=64 time=0.322 ms

它将把host1的IP作为可用主机名传递给新容器


也就是说,你可能会更好地使用自定义网络,例如:

docker network create mynetwork
docker run --name host3 -dit --network mynetwork alpine ash
docker run -it --network mynetwork alpine ping host3

是。如果未指定网络,则使用默认网络。因此,在不指定网络的情况下启动一个新容器将使其处于默认状态。

这是可能的。您必须在每个容器中为/etc/hosts添加主机分辨率:

# docker exec -it host2 ash -c "echo `docker inspect host1 --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}'` host1 >> /etc/hosts"
# docker exec -it host2 ping -c 1 host1
PING host1 (192.168.128.2): 56 data bytes

相关内容

最新更新