【问题标题】:Network name of containers on multiple bridges多个网桥上容器的网络名称
【发布时间】:2016-06-15 05:59:00
【问题描述】:

我正在桥接网络 N1 上启动一个容器,比如 C1:

docker network create --driver bridge N1
docker run --net=N1 --name C1 -d some image

然后我在 N2 上启动另一个容器 C2:

docker network create --driver bridge N2
docker run --net=N1 --name C1 -d some image

我想启动第三个容器(这将是一个可从端口 9090 访问的反向代理)C3,以便它可以看到 C1:

docker run --net=N1 -p 9090:9090 --name C3

然后我可以从 C3 内部访问 C1,它的名字是 C1。所以例如从 C3 我可以做

curl http://C1

然后我可以在 C3 内运行反向代理,并将来自端口 9090 的请求转发到 C1 上的其他一些端口。

但如果我想将 N2 添加到 C3:

docker run  --net=N1 --net=N2 -p 9090:9090 --name C3

然后从 C3 内部,如果我查找 C1 或 C2,我会发现找不到主机:

curl http://C1
host not found

在这种情况下,C1 和 C2 的名称是什么?

【问题讨论】:

    标签: docker docker-networking


    【解决方案1】:

    要将容器连接到第二个网络,您需要使用docker network connect <network> <container>docker run 命令只支持单一网络。

    您可以在容器启动之前或之后执行此操作。某些进程在启动之前将需要额外的接口。

    docker create --name C3 --net=N1 <image>
    docker network connect N2 C3
    docker start C3
    

    容器现在将有多个接口

    $ docker exec C3 ip ad sh
    ...
    360: eth0@if361: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
        link/ether 02:42:ac:14:00:03 brd ff:ff:ff:ff:ff:ff
        inet 172.20.0.3/16 scope global eth0
           valid_lft forever preferred_lft forever
        inet6 fe80::42:acff:fe14:3/64 scope link 
           valid_lft forever preferred_lft forever
    362: eth1@if363: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
        link/ether 02:42:ac:15:00:03 brd ff:ff:ff:ff:ff:ff
        inet 172.21.0.3/16 scope global eth1
           valid_lft forever preferred_lft forever
        inet6 fe80::42:acff:fe15:3/64 scope link 
           valid_lft forever preferred_lft forever
    

    容器可以解析并连接到两个网络上的容器

    $ docker exec C3 ping -c 1 C1
    PING ping2 (172.20.0.5): 56 data bytes
    64 bytes from 172.20.0.5: icmp_seq=0 ttl=64 time=0.221 ms
    --- ping2 ping statistics ---
    1 packets transmitted, 1 packets received, 0% packet loss
    round-trip min/avg/max/stddev = 0.221/0.221/0.221/0.000 ms
    
    $ docker exec C3 ping -c 1 C2
    PING ping1 (172.21.0.5): 56 data bytes
    64 bytes from 172.21.0.5: icmp_seq=0 ttl=64 time=0.177 ms
    --- ping1 ping statistics ---
    1 packets transmitted, 1 packets received, 0% packet loss
    round-trip min/avg/max/stddev = 0.177/0.177/0.177/0.000 ms
    

    一旦您开始进入多个网络,使用Docker Compose v2 定义来设置和运行您的环境可能会更容易。

    【讨论】:

    • 它工作,实际上我必须在附加N2之前启动C3,但它工作。但是这会做什么,因为它也启动了 C3: docker run --net=N1 --net=N2 -p 9090:9090 --name C3
    • 它将附加到一个只有一个网络,您提供的最后一个网络参数(N2)
    猜你喜欢
    • 2022-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-14
    • 2019-11-16
    • 1970-01-01
    相关资源
    最近更新 更多