默认情况下,每一个容器都提供了一个独立的环境来运行程序,可容器之间的通信又格外重要,因此可以通过自定义网络桥接的方式来进行容器间通信。

创建一个网络

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.