介绍
在开发时候SpirngBoot应用需要连接Mysql数据库 ,两个都在容器内,而容器都是独立的,这时需要配置容器内的网络互联。一旦两个容器加入了自定义网络就可以使用容器名互相访问。
Docker虚拟网卡
在安装Docker时候他会默认安装一个虚拟网卡名为:docker0,地址为172.17.0.1/16 前16位不能动
ifconfig
docker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.17.0.1 netmask 255.255.0.0 broadcast 172.17.255.255
inet6 fe80::42:c9ff:fecf:5e84 prefixlen 64 scopeid 0x20<link>
ether 02:42:c9:cf:5e:84 txqueuelen 0 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 13 bytes 1760 (1.7 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
查看MYSQL容器IP
docker inspect mysql-container
"Networks": {
"bridge": {
"IPAMConfig": null,
"Links": null,
"Aliases": null,
"MacAddress": "02:42:ac:11:00:02",
"NetworkID": "a67f43d49997fa282c4a35fbf28c6e896645dd28b4dbe703e1fc47f96ccf3adb",
"EndpointID": "ef0fe6a5345cd22ba35a98527c3264639bd655557a5226d08c6010f065de2797",
"Gateway": "172.17.0.1",
"IPAddress": "172.17.0.2",
}
}
但是!一般情况下不会去使用IP地址去连接,容器重启或停止了,IP地址就会方式变化。
自定义网络
加入自定义网络的容器才可以通过容器名互相访问。使用名称进行连接。
创建自定义网络
创建名为dpc6699的网络
docker network create dpc6699
查看是否创建成功
docker network ls
NETWORK ID NAME DRIVER SCOPE
a67f43d49997 bridge bridge local
5fcbb702fe43 dpc6699 bridge local
bf0149b5e1c6 host host local
1ea82115a681 none null local
查看网卡
ip addr
8: br-5fcbb702fe43: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN
link/ether 02:42:02:66:90:f4 brd ff:ff:ff:ff:ff:ff
inet 172.18.0.1/16 brd 172.18.255.255 scope global br-5fcbb702fe43
valid_lft forever preferred_lft forever
172.18.0.1/16 创建成功
容器加入网络
dpc6699 刚创建的网络名 mysql-container 加入的容器
docker network connect dpc6699 mysql-container
查看容器所在网络
docker inspect mysql-container
有两个一个默认网桥 一个自定义dpc6699
"Networks": {
"bridge": {
"MacAddress": "02:42:ac:11:00:02",
"NetworkID": "a67f43d49997fa282c4a35fbf28c6e896645dd28b4dbe703e1fc47f96ccf3adb",
"EndpointID": "ef0fe6a5345cd22ba35a98527c3264639bd655557a5226d08c6010f065de2797",
"Gateway": "172.17.0.1",
"IPAddress": "172.17.0.2",
},
"dpc6699": {
"MacAddress": "02:42:ac:12:00:02",
"NetworkID": "5fcbb702fe4394de2971db0cb3728bd83de44982916d54e4a19ef1b249f2e252",
"EndpointID": "c2280d8177ef778432b86b0ac9f8792c5193542bb3d912b515bf284ea2278940",
"Gateway": "172.18.0.1",
"IPAddress": "172.18.0.2",
}
}
创建时加入自定义网络
创建时指定网络,不会在用默认的,而是只有一个dpc6699网络
docker run -d name dd -p 8080:8080 --network dpc6699 mysql-container