②. 网络模式
③. 外部是如何访问tomcat或者redis的?
①. 使用(宿主机的ip:端口号)进行访问tomcat或者redis的时候,会根据启动容器的-p映射端口原则,找到对应的映射端口,通过 iptables -nL去查看容器内的端口对应的ip,通过这个ip就可以访问到docker中的容器(tomcat/ redis)
②. 默认、域名访问不通
[root@i-id8g0yu9 ~]# docker run -d --name mytomcat tomcat:jre8-alpine 2e4107a77847a3b1805b5010fe46bfd14c02b0389a6bc5c84f897547ad5c0f2d [root@i-id8g0yu9 ~]# docker exec -it mytomcat /bin/bash bash-4.4# ping myredis ping: bad address 'myredis' bash-4.4#
③. 容器之间互相ping通(–link), docker run -d -P --name=mytomcat1 --link=myredis tomcat:jre8-alpine;这种方式启动的时候,会查询–link的容器的ip并写死到当前容器的/etc/hosts下面;而是单向的,对方并不知道我的存在,问题: myredis ip地址变了不会更新(解决方案:使用自定义网络)
[root@i-id8g0yu9 ~]# docker run -d --name=mytomcat1 --link=myredis tomcat:jre8-alpine 0c5e60a75d031ef3b627eb0b794694e85c15c55cffee612597d356a3c1bf1f07 [root@i-id8g0yu9 ~]# docker exec -it mytomcat1 /bin/bash bash-4.4# ping myredis PING myredis (172.17.0.2): 56 data bytes 64 bytes from 172.17.0.2: seq=0 ttl=64 time=0.180 ms 64 bytes from 172.17.0.2: seq=1 ttl=64 time=0.123 ms 64 bytes from 172.17.0.2: seq=2 ttl=64 time=0.120 ms ^C --- myredis ping statistics --- 3 packets transmitted, 3 packets received, 0% packet loss round-trip min/avg/max = 0.120/0.141/0.180 ms bash-4.4# cat /etc/hosts 127.0.0.1 localhost ::1 localhost ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters 172.17.0.2 myredis 4982a68fda73(容器id) 172.17.0.3 0c5e60a75d03(容器id) [root@i-id8g0yu9 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 0c5e60a75d03 tomcat:jre8-alpine "catalina.sh run" 2 minutes ago Up About a minute 8080/tcp mytomcat1 4982a68fda73 redis "docker-entrypoint.s…" 25 minutes ago Up 25 minutes 6379/tcp myredis