# 启动一个tomcat [root@localhost mycentos]# docker run -d tomcat:9.0 b7e1e9081c736d6713507f59880d9219ca70164c6bf72b30542d5c91359a2908
[root@localhost mycentos]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES b7e1e9081c73 tomcat:9.0 "catalina.sh run" 7 seconds ago Up 6 seconds 8080/tcp hardcore_lamport
# 执行容器内的 ip addr 命令 [root@localhost mycentos]# docker exec -it b7e1e9081c73 ip addr 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever 100: eth0@if101: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0 inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0 valid_lft forever preferred_lft forever
# 用本机去ping一下容器内的ip,可以ping通 [root@localhost mycentos]# ping 172.17.0.2 PING 172.17.0.2 (172.17.0.2) 56(84) bytes of data. 64 bytes from 172.17.0.2: icmp_seq=1 ttl=64 time=0.111 ms 64 bytes from 172.17.0.2: icmp_seq=2 ttl=64 time=0.037 ms 64 bytes from 172.17.0.2: icmp_seq=3 ttl=64 time=0.037 ms 64 bytes from 172.17.0.2: icmp_seq=4 ttl=64 time=0.036 ms ^C --- 172.17.0.2 ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 3000ms rtt min/avg/max/mdev = 0.036/0.055/0.111/0.032 ms [root@localhost mycentos]#
# 创建两个tomcat容器 [root@localhost mycentos]# docker run -d --name=tomcat01 tomcat:9.0 e24c0808d48946298fef99299564a5f5c5b88130589ecf5263efe89fa62bbff1 [root@localhost mycentos]# docker run -d --name=tomcat02 tomcat:9.0 bd75262253da1d60d4bbc8e59bb085619ab43360d98f9ce4589cb218d3cb0a33
# 查看这两个容器 [root@localhost mycentos]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES bd75262253da tomcat:9.0 "catalina.sh run" 4 seconds ago Up 4 seconds 8080/tcp tomcat02 e24c0808d489 tomcat:9.0 "catalina.sh run" 8 seconds ago Up 7 seconds 8080/tcp tomcat01
# 查看 tomcat01 的ip [root@localhost mycentos]# docker exec -it tomcat01 ip addr 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever 104: eth0@if105: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0 inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0 valid_lft forever preferred_lft forever
# tomcat02 通过 ip 去 ping tomcat01,能 ping 通! [root@localhost mycentos]# docker exec -it tomcat02 ping 172.17.0.2 PING 172.17.0.2 (172.17.0.2) 56(84) bytes of data. 64 bytes from 172.17.0.2: icmp_seq=1 ttl=64 time=0.142 ms 64 bytes from 172.17.0.2: icmp_seq=2 ttl=64 time=0.061 ms ^C --- 172.17.0.2 ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 999ms rtt min/avg/max/mdev = 0.061/0.101/0.142/0.041 ms
# tomcat02 通过 容器名 去 ping tomcat01,不能 ping 通! [root@localhost mycentos]# docker exec -it tomcat02 ping tomcat01 ping: tomcat01: Name or service not known
发现其实这里面把我们去 ping tomcat01 写死了,把 ip 写死了,ping tomcat01 其实就是 ping 172.17.0.2!
这其实就是挂羊头卖狗肉!
再学习一下docker网络的命令
docker网络也是有对应的命令的,我们可以通过这些命令去查看网络的一些信息,很方便!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
[root@localhost mycentos]# docker network --help
Usage: docker network COMMAND
Manage networks
Commands: connect Connect a container to a network create Create a network disconnect Disconnect a container from a network inspect Display detailed information on one or more networks ls List networks prune Remove all unused networks rm Remove one or more networks
Run 'docker network COMMAND --help'for more information on a command.
OK,先看看 ls 命令:
1 2 3 4 5
[root@localhost mycentos]# docker network ls NETWORK ID NAME DRIVER SCOPE 44697ad6f30f bridge bridge local 0c97d436b293 host host local 91f13ca9e915 none null local
[root@localhost mycentos]# docker network ls NETWORK ID NAME DRIVER SCOPE 44697ad6f30f bridge bridge local 0c97d436b293 host host local 91f13ca9e915 none null local
[root@localhost mycentos]# docker network ls NETWORK ID NAME DRIVER SCOPE 44697ad6f30f bridge bridge local 0c97d436b293 host host local e184ccd5c94c mynet bridge local 91f13ca9e915 none null local [root@localhost mycentos]#
Options: --alias strings Add network-scoped aliasfor the container --driver-opt strings driver options for the network --ip string IPv4 address (e.g., 172.30.100.104) --ip6 string IPv6 address (e.g., 2001:db8::33) --link list Add link to another container --link-local-ip strings Add a link-local address for the container
为了验证上面的情况,我们再创建一个 tomcat03,让它默认在 docker0 下面:
1 2
[root@localhost ~]# docker run -d --name tomcat03 tomcat:9.0 e88c3dcc0f7226faa10a894abf532df40443b26a9ad1939a17563a46ddff879f