使用-net = host时,Windows Docker桌面在主机和容器之间提供不同的网络接口

发布于 2025-02-03 00:09:01 字数 2568 浏览 2 评论 0原文

更新

我使用Ubuntu作为主机尝试相同的设置。有用!我注意到主机和容器中的接口信息(<代码> IP A )在Ubuntu Docker中是相同的。但是使用Docker Windows桌面时有所不同。

因此,问题变成了为什么Windows Docker桌面使用- Net = host时,为什么Windows Docker桌面在主机和容器之间提供不同的网络接口?


原始问题

我打开一个带有-net =主机的容器。我想从容器内部连接到主机的同一子网的设备。此外,该容器具有在端口3000上运行的服务器。

  • 主机
  • (192.168.64.101/18)设备(192.168.64.102/18)
  • 容器(-net = host,port 3000上的host,服务器)
  1. 容器可以连接到192.168.64.102 。
  2. 容器可以使用192.168.64.101 ping主机,

但我无法从主机上访问端口3000上的容器服务器。我尝试curl localhost:3000连接垃圾。

我认为 - net =主机将将容器视为与主机相同的网络。为什么我不能使用Localhost连接到容器的服务器?


IP A来自容器

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 brd 127.255.255.255 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: tunl0@NONE: <NOARP> mtu 1480 qdisc noop state DOWN qlen 1000
    link/ipip 0.0.0.0 brd 0.0.0.0
3: sit0@NONE: <NOARP> mtu 1480 qdisc noop state DOWN qlen 1000
    link/sit 0.0.0.0 brd 0.0.0.0
4: services1@if5: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue state UP
    link/ether a2:41:c9:a1:cd:4e brd ff:ff:ff:ff:ff:ff
    inet 192.168.65.4 peer 192.168.65.5/32 scope global services1
       valid_lft forever preferred_lft forever
    inet6 fe80::a041:c9ff:fea1:cd4e/64 scope link
       valid_lft forever preferred_lft forever
6: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UNKNOWN qlen 1000
    link/ether 02:50:00:00:00:01 brd ff:ff:ff:ff:ff:ff
    inet 192.168.65.3/24 brd 192.168.65.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::50:ff:fe00:1/64 scope link
       valid_lft forever preferred_lft forever
7: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP
    link/ether 02:42:fb:e9:2d:76 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
       valid_lft forever preferred_lft forever
    inet6 fe80::42:fbff:fee9:2d76/64 scope link
       valid_lft forever preferred_lft forever
11: vethfd2c43f@if10: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue master docker0 state UP
    link/ether d6:ee:fe:80:24:04 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::d4ee:feff:fe80:2404/64 scope link
       valid_lft forever preferred_lft forever

Update

I try the same setup using Ubuntu as host. It works! And I notice the interface info (ip a) in host and container are the same in Ubuntu docker. But are different when using docker windows desktop.

So, the question becomes, why windows docker desktop give different network interface between host and container when using --net=host?


Original question

I open a container with --net=host. I want to connect to a device, which on the same subnet of my host, from inside the container. Also, the container has a server running on port 3000.

  • Host (192.168.64.101/18)
  • Device (192.168.64.102/18)
  • Container (--net=host, server on port 3000)
  1. Container can connect to device with 192.168.64.102.
  2. Container can ping the host with 192.168.64.101

But I cannot access container's server on port 3000 from host. I try curl localhost:3000 the connection refuse.

I thought --net=host will treat container as same network as host. Why can't I connect to the container's server using localhost?

ip a from container

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 brd 127.255.255.255 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: tunl0@NONE: <NOARP> mtu 1480 qdisc noop state DOWN qlen 1000
    link/ipip 0.0.0.0 brd 0.0.0.0
3: sit0@NONE: <NOARP> mtu 1480 qdisc noop state DOWN qlen 1000
    link/sit 0.0.0.0 brd 0.0.0.0
4: services1@if5: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue state UP
    link/ether a2:41:c9:a1:cd:4e brd ff:ff:ff:ff:ff:ff
    inet 192.168.65.4 peer 192.168.65.5/32 scope global services1
       valid_lft forever preferred_lft forever
    inet6 fe80::a041:c9ff:fea1:cd4e/64 scope link
       valid_lft forever preferred_lft forever
6: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UNKNOWN qlen 1000
    link/ether 02:50:00:00:00:01 brd ff:ff:ff:ff:ff:ff
    inet 192.168.65.3/24 brd 192.168.65.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::50:ff:fe00:1/64 scope link
       valid_lft forever preferred_lft forever
7: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP
    link/ether 02:42:fb:e9:2d:76 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
       valid_lft forever preferred_lft forever
    inet6 fe80::42:fbff:fee9:2d76/64 scope link
       valid_lft forever preferred_lft forever
11: vethfd2c43f@if10: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue master docker0 state UP
    link/ether d6:ee:fe:80:24:04 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::d4ee:feff:fe80:2404/64 scope link
       valid_lft forever preferred_lft forever

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文