我有一堆docker容器在默认的网桥上运行,需要相互通信。
我想将一些容器移动到单独的用户定义网络,以便我可以指定其IP地址。
有没有办法做到这一点,而不必删除/复制所有容器并将它们移动到另一个网络,或者这是唯一的方法?
答案 0 :(得分:2)
可以在现场创建网络并连接容器。如果进程正在侦听特定的IP地址而不是所有接口(*
或::
)
docker network create \
--driver=bridge \
--subnet=192.168.38.0/24 \
--gateway=172.16.238.1 \
<NETWORK>
docker network connect \
--ip 192.168.38.14 \
<NETWORK> \
<CONTAINER>
docker network disconnect <OLDNETWORK> <CONTAINER>
在容器eth0
位于默认网桥
→ docker exec $CONTAINER ip ad sh
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
15: eth0@if16: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue
link/ether 02:42:ac:11:00:04 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.4/16 brd 172.17.255.255 scope global eth0
valid_lft forever preferred_lft forever
之后,eth1
已添加,不再有eth0
→ docker exec $CONTAINER ip ad sh
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
17: eth1@if18: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue
link/ether 02:42:c0:a8:26:0e brd ff:ff:ff:ff:ff:ff
inet 192.168.38.14/24 brd 192.168.38.255 scope global eth1
valid_lft forever preferred_lft forever
答案 1 :(得分:0)
您还应该考虑使用docker compose。它将使用自己的DNS自动创建网络,允许连接容器。