Docker Network从默认网桥移动

时间:2018-03-19 21:26:02

标签: docker networking

我有一堆docker容器在默认的网桥上运行,需要相互通信。

我想将一些容器移动到单独的用户定义网络,以便我可以指定其IP地址。

有没有办法做到这一点,而不必删除/复制所有容器并将它们移动到另一个网络,或者这是唯一的方法?

2 个答案:

答案 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自动创建网络,允许连接容器。