我在Windows 10笔记本电脑上使用Docker。我最近尝试使一些代码在容器中运行以连接到网络上的另一台服务器。我最终制作了一个Ubuntu容器,发现问题是docker网络和服务器资源(172.17.1.3)之间的IP冲突。
Windows Docker设置上似乎还有一个额外的网络层,而Unix系统上没有该层,并且docker注释“仅使用桥接网络”不能解决此问题。
docker network inspect bridge
[
{
"Name": "bridge",
"Id": "d60dd1169153e8299a7039e798d9c313f860e33af1b604d05566da0396e5db19",
"Created": "2020-02-28T15:24:32.531675705Z",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": null,
"Config": [
{
"Subnet": "172.17.0.0/16",
"Gateway": "172.17.0.1"
}
]
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {},
"Options": {
"com.docker.network.bridge.default_bridge": "true",
"com.docker.network.bridge.enable_icc": "true",
"com.docker.network.bridge.enable_ip_masquerade": "true",
"com.docker.network.bridge.host_binding_ipv4": "0.0.0.0",
"com.docker.network.bridge.name": "docker0",
"com.docker.network.driver.mtu": "1500"
},
"Labels": {}
}
]
是否可以更改子网/网关以避免IP冲突?如果可以,怎么办?我尝试了简单的操作并建立了一个新的docker网络:
docker network create --driver=bridge --subnet=172.15.0.0/28 --gateway=172.15.0.1 new_subnet_1
在某处似乎仍然存在冲突,在172.17.0.0/16中我什么也看不到其他设备。我猜猜它在HyperV,vEthernet适配器或vswitch中。
更新1 我查看了具有new_subnet_1网络的Wireshark(PC级别),但没有看到这些数据包离开vSwitch接口或PC的NIC。 我确实看到了这个Docker forum,这表明可能是Hyper-V和V-switch出现问题。
Docker Engine v19.03.5 Docker为Windows安装创建的DockerDesktopVM
更新2 经过几次Hyper-v编辑并将环境重新组合在一起后,我检查了DockerDesktopVm。从特权容器进入后,我发现docker0网络存在IP冲突。 Docker0似乎是我避免使用的默认网桥网络,因为它是一个预定义的网络,无法删除,并且所有流量都发送给了它。
答案 0 :(得分:1)
经过几次分支,并且至少破坏了我的环境一次,我发现该解决方案比以前容易得多。
将以下行添加到Windows 10中的<pandas.core.groupby.generic.DataFrameGroupBy object at 0x7fe560cc17d0>
文件中
%userprofile%\.docker\deamon.json
在Hyper-V和Docker Host Linux VM中追踪选项之后的简便解决方案。