将Linux容器分配给与主机相同的LAN的方法?

时间:2018-05-31 09:34:19

标签: docker docker-networking docker-for-windows linux-containers

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

我已经尝试了几种方法来实现它,但都失败了。 虽然有很多关于如何执行此操作的说明,但看​​起来它们都适用于Docker for Linux。

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

我尝试过的事情:

Macvlan:

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

管道:

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

从daemon.json修改bip:

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

使用--net host:

运行映像

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

2 个答案:

答案 0 :(得分:0)

我在这里发布了类似问题的另一个问题: (RESOLVED) DOCKER: Linux Container on Windows 10, how to use nmap to scan device's mac address

实际上他们的目标完全相同,将Docker for Windows放在本地网络(物理网络)上。

为了达到这个目标,我已经阅读了数百页,最后我想出了如何去做,有关详细信息,请参阅以下页面。

Windows 10 HOME用户,您可以参考此页面进行虚拟框设置/ Windows 10 PROFESSIONAL / ENTERPRISE用户,您可以参考此页面获取hyperV https://hub.docker.com/r/qtimmylin/evt_platform/

很抱歉,由于机密内容,我无法发布图片,但我相信即使您是Docker的新手,这些说明也足够清晰。

希望这有用,所以你不需要像我一样浪费整整一周的时间。

答案 1 :(得分:0)

我仍在努力,但是您断言macvlan在Windows 10上不起作用是不正确的。按照the question you linked中的一些说明,我在Windows 10上建立了功能正常的macvlan网络。我仍在努力让网络上的主机能够ping {{ 1}}网络。

这就是我所做的:

  1. 在管理员Powershell窗口中:macvlan设置(使用 Set-NetIPInterface -ifindex <interface_index> -Forwarding Enabled获取网络适配器及其Get-NetAdapter号的列表)
  2. ifindex用您要分配给docker network create routed0 --subnet 192.168.2.0/24网络的网络的正确网络号和网络掩码位替换192.168.2.0/24

对我来说,这产生了一个docker网络,通过该网络,附加的容器可以通过192.168.1.0/24的路由器成功与Internet主机通信。但是,我尚未弄清楚如何将Windows 10盒配置为充当192.168.2.0/24的网关以实际充当网关(以及将ICMP请求从1.0 / 24上的主机路由到Docker网络2.0的操作) / 24托管)。