默认情况下,每一个容器都提供了一个独立的环境来运行程序,可容器之间的通信又格外重要,因此可以通过自定义网络桥接的方式来进行容器间通信。
创建一个网络
docker network create my_net
此时可以检查该网络状态
以及查询my_net是否有容器链接
docker network inspect my_net
让容器链接上网络
在容器创建时链接
docker run -d -p 3306:3306 --network=my_net mysql
将容器添加到网络中
docker network connet my_net mysql
那么容器间如何通讯呢?
我们可以在检查网络状态
docker network inspect my_net
这时候打开的json配置中,有一个containers属性
"Containers": {
"56f7e8f95043d417910b2605feda03641a18007fccb47c4a91012a740fa3a04b": {
"Name": "redis",
"EndpointID": "cadf8ebe1b549221aeee2daabf5f4ce7f8932abfce6c6de0d79d1b59e360c2f6",
"MacAddress": "02:42:ac:12:00:03",
"IPv4Address": "172.18.0.3/16",
"IPv6Address": ""
},
"77397939d529007c9577dd24ccbe2a28878d50a428e3997bb73e007dd2d70f53": {
"Name": "mysql",
"EndpointID": "02782249dfcf6e6fed2be4fffdbdf38d0076475bb5703faa30923fe85d57467c",
"MacAddress": "02:42:ac:12:00:02",
"IPv4Address": "172.18.0.2/16",
"IPv6Address": ""
}
},
如上表,表示容器在网络中的地址,mysql为172.18.0.2
,redis为172.18.0.3
这样我们可以在服务中通过ip来访问mysql或redis了。
但是,这样用来创建服务,ip地址经常改变,不容易进行数据移植,这时候我们可以直接使用容器名:端口
的方式来访问服务,也就是类似于域名:端口
的方式
即http://redis:6379
,http://mysql:3306
Q.E.D.