docker - 将 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
解决方案
我发布了另一个问题,这与这个问题的根本原因相同。因此,它们可以应用于相同的解决方案。
解决方案发布在 DOCKER: Linux Container on Windows 10, how to use nmap to scan device's mac address
推荐阅读
- cplex - 如何确保我的二元决策变量的第二个索引在每个解决方案中都相等?
- oracle - Quartz 2.2.2:org.quartz.impl.jdbcjobstore.LockException:获取数据库行锁失败:ORA-00942:表或视图不存在
- node.js - 引擎“节点”与此模块不兼容
- c - 在 Windows 中读取 RTC
- node.js - 如何将套接字发射到特定的套接字连接?
- xml - 根元素中可以包含文本吗?
- glib - 关于 Vala 上的 GLib.Idle
- php - 尝试获取 Instagram 嵌入页面 HTML 代码时出错
- amazon-web-services - AWS IoT 移动应用程序
- python - urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host='127.0.0.1', port=49951): 使用 Selenium 和 Python 的 url 超出了最大重试次数