我的目标是让我的Linux容器与主机和其他设备在同一个局域网上运行。 因为我需要经常使用nmap来扫描局域网上的设备mac地址。不幸的是,nmap扫描仅在这些计算机都位于同一子网时才起作用。
我已经尝试了几种方法来实现它,但都失败了。 虽然有很多关于如何执行此操作的说明,但看起来它们都适用于Docker for Linux。
例如,来自stackoverflow的非常详细的说明: Docker on CentOS with bridge to LAN network也不适合我。
我尝试过的事情:
仅适用于Linux系统,但我使用的是Windows 10 ..
我试过,它会将docker0设置为静态IP,然后容器仍然无法ping通LAN上的设备。我想这是因为容器被放置在NAT并且更改docker0 bridge ip将无法实现我的目标。
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
答案 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}}网络。
这就是我所做的:
macvlan
设置(使用 Set-NetIPInterface -ifindex <interface_index> -Forwarding Enabled
获取网络适配器及其Get-NetAdapter
号的列表)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托管)。