问题场景
Tomcat容器需要与Mysql容器通信,Tomcat需要向Mysql发送网络包读取数据,一般情况Mysql不需要主动向Tomcat发起请求,这种情况就是单项通信。
一般情况下采用docker inspect 容器id
查看IPAddress
然后两个容器间互相Ping IP地址是可以Ping通的,因为启动采用是默认的桥接方式。
但这种直接调用IP地址的情况存在局限性,比如:有一天一个容器死掉了,需要重新run一次镜像起一个新的容器,Docer可能会重新为其中一个容器分配IP地址,那么需要到所有对应的容器中修改配置文件中这个地址,在容器量很大的情况下,这就造成维护困难。
启动Mysql容器
docker run --name datasongmysql -e MYSQL_ROOT_PASSWORD=iscas123 -d mysql:5.7
启动tomcat应用容器并link到mysql数据库:
docker run -itd --name tomcat1 --link datasongmysql tomcat:latest
注意:链接到的容器(datasongmysql)一定要存在!
进入容器Ping 容器名
docker exec -it 容器ID /bin/bash
ping datasongsql
不管容器如何变化,Link链接只认容器名,新建的容器名只要修改容器名为Link设置的容器名,就依然可以保持通信。
Link的原理是对当前容器的Host文件做了一个解析。
Tip:
官方版的mysql 5.7 需要安装工具才有ping命令:
apt-get update && apt-get install iputils-ping