【问题标题】:docker macvlan - no route to host (container)docker macvlan - 没有到主机的路由(容器)
【发布时间】:2020-08-01 09:06:48
【问题描述】:

我试图从 docker 了解“macvlan”网络。我创建了一个新网络:

docker network create -d macvlan \
  --subnet=192.168.2.0/24 \
  --gateway=192.168.2.1 \
  -o parent=eno1 \
  pub_net

并使用新网络启动新容器:

docker run --rm -d --net=pub_net --ip=192.168.2.74 --name=whoami -t jwilder/whoami

当我尝试从容器访问服务或 ping 它时,我得到:

curl: (7) Failed to connect to 192.168.2.74 port 8000: no route to host

在 Ubuntu 16.04、Ubuntu 18.04 和 CentOS 7 上测试。 来自 docker 主机本身或网络上的其他客户端都无法访问容器。

我按照 docker 站点的示例进行操作:https://docs.docker.com/network/network-tutorial-macvlan/#bridge-example

我缺少什么?

我在这里阅读Bind address in Docker macvlan 来执行这些命令(不知道它们做了什么):

sudo ip link add pub_net link eno1 type macvlan mode bridge
sudo ip addr add 192.168.2.22/24 dev pub_net

但这在我的机器上没有任何作用

【问题讨论】:

    标签: docker networking routes containers macvlan


    【解决方案1】:

    我相信主机无法通过 macvlan 网络访问自己的容器是设计使然。我把它留给其他人来解释为什么会这样,但要验证这是您的问题所在,您可以尝试从网络上的另一台主机或什至从另一个容器或虚拟机上的192.168.2.74 ping 您的容器同一个主机。如果您可以从其他机器但不能从主机访问容器,则一切正常。

    根据this blog post,您仍然可以通过在主机sub-interface上创建一个macvlan接口来允许主机-容器通信,然后在主机中创建一个macvlan接口以使其访问容器所在的macvlan。

    我自己还没有尝试过,我不确定确切的后果,所以我在这里引用the blog post 的说明,以便其他人可以在必要时添加:

    在主机子接口上创建一个macvlan接口:

    docker network create -d macvlan \
    –subnet=192.168.0.0/16 \
    –ip-range=192.168.2.0/24 \
    -o macvlan_mode=bridge \
    -o parent=eth2.70 macvlan70
    

    在那个 macvlan 接口上创建容器:

    docker run -d –net=macvlan70 –name nginx nginx
    

    找到容器的ip地址:

    docker inspect nginx | grep IPAddress
    “SecondaryIPAddresses”: null,
    “IPAddress”: “”,
    “IPAddress”: “192.168.2.1”,
    

    此时,我们无法从主机 ping 容器 IP “192.168.2.1”。

    现在,让我们在同一网络中地址为“192.168.2.10”的主机中创建macvlan接口。

    sudo ip link add mymacvlan70 link eth2.70 type macvlan mode bridge
    sudo ip addr add 192.168.2.10/24 dev mymacvlan70
    sudo ifconfig mymacvlan70 up
    

    现在,我们应该可以 ping 容器 IP 以及从主机访问“nginx”容器了。

    $ ping -c1 192.168.2.1
    PING 192.168.2.1 (192.168.2.1): 56 data bytes
    64 bytes from 192.168.2.1: seq=0 ttl=64 time=0.112 ms
    
    — 192.168.2.1 ping statistics —
    1 packets transmitted, 1 packets received, 0% packet loss
    round-trip min/avg/max = 0.112/0.112/0.112 ms
    

    【讨论】:

    • 我认为this answer here 暗示了为什么会出现这种情况。
    • sudo ifconfig <macvlan_bridge> up 成功了,谢谢
    猜你喜欢
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多