1.网络模式
2.自定义Bridge
2.1 创建网络
通过network参数创建:
docker network create test-network #名为test-network的网络(bridge模式)
2.2 将容器添加到网络
2.2.1 未运行的容器
在docker run的时候--network参数指定网络:
docker run --name mysql --network test-network -p 3306:3306 mysql:latest
2.2.2 已创建的容器
将容器添加到网络:
docker network connect test-network mysql #mysql容器名,test-network网络名。
查看test-network的网络配置:
docker network inspect test-network
移除已创建容器的默认网络:
docker network disconnect bridge mysql
2.3 通信方式(以postgres加gogs为例)
现在需要通信的容器已在同一网络下。
命令:
docker network create test-net
docker run --name postgres -e POSTGRES_PASSWORD="123456" --network test-net -p 5432:5432 -d postgres:latest
docker run -p 10022:22 -p 3000:3000 --name=gogs --restart=always -e TZ="Asia/Shanghai" --network test-net -d gogs/gogs
docker network inspect test-net
网络查看结果:
[
{
"Name": "test-net",
"Id": "432614f30123ef38bcf0ad386abee3fcf50940bb789517c6464b95daa93845ea",
"Created": "2023-10-27T03:22:19.54867326Z",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": {},
"Config": [
{
"Subnet": "172.18.0.0/16",
"Gateway": "172.18.0.1"
}
]
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {
"43858bf66ae5878a62d93973b9dcd0fb35cd480fb6ea54c1a8a8bcd7148c9815": {
"Name": "postgres",
"EndpointID": "8acee1975bbbab9ee568bef150c88c26d5911904d320bafe7da5ee7203d290e3",
"MacAddress": "02:42:ac:12:00:02",
"IPv4Address": "172.18.0.2/16",
"IPv6Address": ""
},
"9540f616b3c6248a9d91df5a05658a519f75723cfe1510de460f3368c035cfb3": {
"Name": "gogs",
"EndpointID": "0f5629e42bce3277f0b4f051fb7ce8cc73c714a63e29737ccd8bdfa569826d7f",
"MacAddress": "02:42:ac:12:00:03",
"IPv4Address": "172.18.0.3/16",
"IPv6Address": ""
}
},
"Options": {},
"Labels": {}
}
]
进入容器(可以通过容器名)并尝试连接:
docker exec -it postgres /bin/bash
apt install -y iputils-ping #安装ping
ping gogs -c 3 #gogs为容器名
结果:
PING gogs (172.18.0.3) 56(84) bytes of data.
64 bytes from gogs.test-net (172.18.0.3): icmp_seq=1 ttl=64 time=0.098 ms
64 bytes from gogs.test-net (172.18.0.3): icmp_seq=2 ttl=64 time=0.073 ms
64 bytes from gogs.test-net (172.18.0.3): icmp_seq=3 ttl=64 time=0.116 ms
--- gogs ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2054ms
rtt min/avg/max/mdev = 0.073/0.095/0.116/0.017 ms
两个容器网络已接通。
3.overlay
可以连接多个docker守护进程或者满足集群服务之间的通信;适用于不同宿主机上的docker容器之间的通信;
3.1 创建网络
用在集群服务中的overlay式网络:
docker network create -d overlay test-overlay
既能用于集群服务,又能用于单独的容器来和其他docker守护进程中的单独的容器进行通信的网络:
docker network create -d overlay --attachable test-attachable-overlay