我有两个容器连接到默认的bridge
网络:
» docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3cc528ddbe7e gitlab/gitlab-runner:latest "/usr/bin/dumb-ini..." 25 minutes ago Up 25 minutes gitlab-runner
3c01073065c7 gitlab/gitlab-ee:latest "/assets/wrapper" About an hour ago Up About an hour (healthy) 0.0.0.0:45022->22/tcp, 0.0.0.0:45080->80/tcp, 0.0.0.0:45443->443/tcp gitlab
我用docker inspect
找到了相应的IP地址(任何更好的获取方法?),我可以通过IP地址从一个容器ping到另一个容器:
» docker exec -it gitlab-runner bash
root@3cc528ddbe7e:/# ping 172.17.0.3
PING 172.17.0.3 (172.17.0.3) 56(84) bytes of data.
64 bytes from 172.17.0.3: icmp_seq=1 ttl=64 time=0.079 ms
64 bytes from 172.17.0.3: icmp_seq=2 ttl=64 time=0.063 ms
64 bytes from 172.17.0.3: icmp_seq=3 ttl=64 time=0.060 ms
^C
--- 172.17.0.3 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 1999ms
rtt min/avg/max/mdev = 0.060/0.067/0.079/0.010 ms
但我无法通过名字ping:
root@3cc528ddbe7e:/# ping gitlab
ping: unknown host gitlab
为什么是这样?我以为docker通过容器名称提供DNS。
我有两个容器连接到默认的bridge
网络...我可以通过IP地址从一个容器ping到另一个容器...但我不能通过名称ping ...
这是默认bridge
网络的默认行为。
来自:Docker docs
用户定义的网桥与默认网桥之间的差异
- 用户定义的桥接器在容器之间提供自动DNS解析。
默认网桥上的容器只能通过IP地址相互访问,除非您使用被认为是遗留的
--link
选项。在用户定义的桥接网络上,容器可以通过名称或别名相互解析。