在Docker用户定义的网络中运行命令

时间:2017-10-30 22:11:39

标签: docker networking

使用docker创建下一个网络后:

 sudo docker network create --driver bridge mynet_nw

如何从此网络内部发出命令?即就像模拟我的机器在mynet_nw里面所以我可以发出ping命令到mynet_nw里面创建的不同的docker图像?

THX

2 个答案:

答案 0 :(得分:1)

通常我建议阅读docker network命令的文档:https://docs.docker.com/engine/reference/commandline/network_connect/#related-commands https://docs.docker.com/engine/userguide/networking/work-with-networks/

无论如何,docker网络会生成一个网络,你需要一个容器来执行命令。

示例:

docker run -it alpine --network mynet_nw /bin/bash
ping mydb

如果您知道容器的名称,您可以从主机本身检查网络:

INSTANCE_NAME='myalpine'
IPADD=$( docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $INSTANCE_NAME )
ping $IPADD

答案 1 :(得分:1)

您可以从网络中的任何Docker容器发出命令。您只需要先添加容器。请参阅docker network connect

无论哪种方式,网络上的任何Docker容器都可以与同一网络上的任何其他Docker容器进行通信。假设您拥有主持人containerAcontainerB,您就可以相互ping这三个中的任何一个:

containerA:~$ ping 172.18.0.1 # from containerA to host
56 bytes from 172.18.0.1: icmp_seq=0 ttl=64 time=0.101 ms
56 bytes from 172.18.0.1: icmp_seq=0 ttl=64 time=0.098 ms
56 bytes from 172.18.0.1: icmp_seq=0 ttl=64 time=0.102 ms
56 bytes from 172.18.0.1: icmp_seq=0 ttl=64 time=0.100 ms

containerA:~$ ping 172.18.0.3 # from containerA to containerB
56 bytes from 172.18.0.3: icmp_seq=0 ttl=64 time=0.082 ms
56 bytes from 172.18.0.3: icmp_seq=0 ttl=64 time=0.079 ms
56 bytes from 172.18.0.3: icmp_seq=0 ttl=64 time=0.116 ms
56 bytes from 172.18.0.3: icmp_seq=0 ttl=64 time=0.094 ms

假设您知道主机名, 甚至可以直接ping主机名。尝试ping主机时,这可能有些怪异,但它应该在容器之间工作。

containerA:~$ ping containerB # from containerA to containerB
56 bytes from 172.18.0.3: icmp_seq=0 ttl=64 time=0.067 ms
56 bytes from 172.18.0.3: icmp_seq=0 ttl=64 time=0.084 ms
56 bytes from 172.18.0.3: icmp_seq=0 ttl=64 time=0.080 ms
56 bytes from 172.18.0.3: icmp_seq=0 ttl=64 time=0.0811 ms