【问题标题】:How can i ping a local docker container from an outside host using macvlan network?如何使用 macvlan 网络从外部主机 ping 本地 docker 容器?
【发布时间】:2017-11-28 10:56:49
【问题描述】:

目标:假设两台主机 A 和 B。A 的容器 x 应该能够从主机 B ping 通,这样容器 x 与 A 和 B 存在于同一网络中,并且有自己的 IP 地址。

Docker 为多主机联网提供了两种网络解决方案 1) 有/没有 docker swarm 的覆盖网络 2) Macvlan 网络。 我想知道第二类 Macvlan 网络如何实现目标

【问题讨论】:

    标签: docker networking macvlan


    【解决方案1】:

    当服务运行时,您可以附加它们以进行调试

    docker exec -ti some-service.1.lz3j7mqb1ux4jp5cwe87gpiok sh

    你需要用docker ps找出服务名称。

    然后您可以尝试 ping 另一个服务。但这只有在两个服务都连接到同一个不是入口的覆盖网络时才有效。

    docker network create -d overlay dev
    docker service create --network dev --name a ...
    docker service create --network dev --name b ...

    然后你可以从 b 中 ping a 和从 a 中 ping b

    【讨论】:

    • 您的解决方案可能是正确的,但正如我在我的问题中突出显示,我正在寻找 Macvlan 网络不覆盖的解决方案
    【解决方案2】:

    创建一个名为 my-macvlan-net 的 macvlan 网络:

    $ docker network create -d macvlan \
      --subnet=172.16.86.0/24 \
      --gateway=172.16.86.1 \
      -o parent=eth0 \
      my-macvlan-net
    

    启动一个示例 alpine 容器并将其附加到 my-macvlan-net 网络:

    $ docker run --rm -dit \
      --network my-macvlan-net \
      --name my-macvlan-alpine \
      alpine:latest \
      ash
    

    检查容器网络设置:

    $ docker exec my-macvlan-alpine ip addr show eth0
    
    9: eth0@tunl0: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue state UP
    link/ether 02:42:ac:10:56:02 brd ff:ff:ff:ff:ff:ff
    inet 172.16.86.2/24 brd 172.16.86.255 scope global eth0
       valid_lft forever preferred_lft forever
    
    $ docker exec my-macvlan-alpine ip route
    
    default via 172.16.86.1 dev eth0
    172.16.86.0/24 dev eth0 scope link  src 172.16.86.2
    

    Networking using a macvlan network

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多