首页 > 解决方案 > 将 Linux 容器分配到与主机相同的 LAN 的方法?

问题描述

我的目标是让我的 Linux 容器与主机和其他设备在同一个局域网上运行。因为我需要经常使用nmap来扫描局域网上的设备mac地址。不幸的是,只有当这些机器都位于同一个子网上时,nmap 扫描才有效。

我尝试了几种方法来实现它,但都失败了。尽管有很多关于如何执行此操作的说明,但似乎它们都适用于 Docker for Linux。

例如,来自 stackoverflow 的非常详细的说明: CentOS 上的 Docker with bridge to LAN network也不适用于我。


我尝试过的事情:

麦克兰:

似乎 Docker for Windows 10 不支持 macvlan,因为我无法将 Windows 网络适配器作为父级..

管道:

这仅适用于 Linux 系统,但我使用的是 Windows 10 ..

从 daemon.json 修改 bip:

我试过了,这会将 docker0 设置为静态 IP,然后容器仍然无法 ping 局域网上的设备。我想这是因为容器放置在 NAT 并且更改 docker0 网桥 ip 将无法实现我的目标。

使用 --net 主机运行映像:

ifconfig 显示:

docker0   Link encap:Ethernet  HWaddr 02:42:2d:b8:0b:7c
          inet addr:172.17.0.1  Bcast:172.17.255.255  Mask:255.255.0.0
          inet6 addr: fe80::42:2dff:feb8:b7c/64 Scope:Link
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:0 (0.0 B)  TX bytes:540 (540.0 B)

eth0      Link encap:Ethernet  HWaddr 02:50:00:00:00:01
          inet addr:192.168.65.3  Bcast:192.168.65.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:111 errors:0 dropped:0 overruns:0 frame:0
          TX packets:147 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:9701 (9.7 KB)  TX bytes:10384 (10.3 KB)

hvint0    Link encap:Ethernet  HWaddr 00:15:5d:0d:52:27
          inet addr:10.0.75.2  Bcast:0.0.0.0  Mask:255.255.255.0
          inet6 addr: fe80::215:5dff:fe0d:5227/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:359819 errors:0 dropped:1303 overruns:0 frame:0
          TX packets:1157 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:54740692 (54.7 MB)  TX bytes:103676 (103.6 KB)

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:57 errors:0 dropped:0 overruns:0 frame:0
          TX packets:57 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1
          RX bytes:5732 (5.7 KB)  TX bytes:5732 (5.7 KB)

它能够 ping 我的子网中的所有内容,但 IP 仍然不是来自我的子网,而是来自 192.168.65.3。

然后我试图通过编辑 /etc/network/interface.d/eth0 将 eth0 ip 更改为静态 IP,重新启动网络服务后,eth0 ip 从我的子网更改为静态 ip,但网络不再工作。

请,如果这里有人知道如何将 Windows 10 的 Linux 容器与主机一样放置在 LAN 上。


我的 Docker 版本

Client:
 Version:      18.03.1-ce
 API version:  1.37
 Go version:   go1.9.5
 Git commit:   9ee9f40
 Built:        Thu Apr 26 07:12:48 2018
 OS/Arch:      windows/amd64
 Experimental: false
 Orchestrator: swarm

Server:
 Engine:
  Version:      18.03.1-ce
  API version:  1.37 (minimum version 1.12)
  Go version:   go1.9.5
  Git commit:   9ee9f40
  Built:        Thu Apr 26 07:22:38 2018
  OS/Arch:      linux/amd64
  Experimental: false

标签: dockerdocker-networkingdocker-for-windowslinux-containers

解决方案


我发布了另一个问题,这与这个问题的根本原因相同。因此,它们可以应用于相同的解决方案。

解决方案发布在 DOCKER: Linux Container on Windows 10, how to use nmap to scan device's mac address


推荐阅读