我正在尝试运行多个 Docker 守护程序,这些守护程序配置为在同一台 Windows 10 机器上运行具有 Hyper-V 隔离和 LCOW 的容器。我能够配置守护进程来管理它们自己的数据文件,但我仍然在努力让网络配置变得干净。
当第一个守护进程启动时,它会绑定到本地“nat”网络以进行 DNS 解析。当第二个守护进程启动时,它尝试绑定到同一个“nat”网络然后失败,因为端口 53 已经被第一个守护进程使用。
错误 [2019-02-15T15:50:58.194988300Z] 容器 nat 的解析器设置/启动失败,“打开名称服务器套接字侦听 udp 172.18.64.1:53 时出错:绑定:每个套接字地址仅使用一次(协议/网络地址/端口)通常是允许的。” 由这个守护进程启动的容器不能执行任何名称解析。通过 IP 访问仍然可以正常工作。
这是我目前使用的 dockerd 配置:
{
"registry-mirrors": [],
"insecure-registries": [],
"bridge": "mydaemon1",
"data-root": "C:\\Users\\myuser\\Desktop\\Docker\\Docker",
"deprecated-key-path": "C:\\Users\\myuser\\Desktop\\Docker\\Docker\\config\\key.json",
"debug": true,
"exec-root": "C:\\Users\\myuser\\Desktop\\Docker\\Docker\\exec-root",
"exec-opts": [
"isolation=hyperv"
],
"experimental": true,
"group": "mydaemon-docker",
"hosts": [
"npipe:////./pipe/mydaemon1_engine"
],
"pidfile": "C:\\Users\\myuser\\Desktop\\Docker\\Docker\\docker.pid",
"storage-opts": [
"lcow.kirdpath=C:\\Users\\myuser\\Desktop\\Docker\\server\\resources",
"lcow.kernel=lcow-kernel",
"lcow.initrd=lcow-initrd.img"
]
}
我试图调整bridge
配置,但它没有改变任何东西。守护进程总是尝试连接到nat
网络。看起来唯一受支持的值是none
,它删除了容器中的默认 eth0 和任何 DNS 支持。
是否可以配置用于 DNS 解析的网络,即nat
这里?
理想情况下,我希望守护程序拥有自己的专用nat
网络。
我知道在 Windows 的 Docker 中使用 MobyVM 作为 WinNAT 是不可能的,在这种情况下使用的 WinNAT不支持它。
在使用 Hyper-V 隔离和 LCOW 时,似乎不再使用 WinNAT,因为Get-NetNat
尽管 DNS 工作正常,但不会返回任何 NAT 网络配置。我不确定我在任何事情上都是对的,如果适用任何其他 Windows 限制,这是否可能也不可能......