Docker关于Windows 10网络问题

Docker关于Windows 10网络问题,windows,docker,hyper-v,Windows,Docker,Hyper V,我在Windows 10笔记本电脑上使用Docker。我最近尝试在容器中运行一些代码,以连接到网络上的另一台服务器。我最终制作了一个Ubuntu容器,发现问题在于docker网络和服务器资源之间的IP冲突(172.17.1.3) Windows Docker安装上似乎有一个额外的网络层,Unix系统上没有,Docker对“简单使用网桥网络”的评论并不能解决这个问题 docker network inspect bridge [ { "Name": "bridge",

我在Windows 10笔记本电脑上使用Docker。我最近尝试在容器中运行一些代码,以连接到网络上的另一台服务器。我最终制作了一个Ubuntu容器,发现问题在于docker网络和服务器资源之间的IP冲突(172.17.1.3)

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 我查看了wireshark(PC级)和新的子网1网络,我没有看到这些数据包离开vSwitch接口或PC的NIC。 我确实看到了这一点,这表明Hyper-V和V-switch可能存在问题

Docker引擎v19.03.5 Docker为Windows安装创建的DockerDesktopVM

更新2
经过几次Hyper-v编辑并重新组合环境后,我检查了DockerDesktopVm。从特权容器进入后,我发现docker0网络存在IP冲突。Docker0似乎与我避免使用的默认网桥网络相同,因为它是一个预定义的网络,无法删除,我的所有流量都被发送到它。

经过几次分支,并至少破坏了一次我的环境,我发现解决方案比我原来的更容易

  • 关闭Docker桌面服务
  • 在windows 10中的
    %userprofile%\.docker\deamon.json
    文件中添加了以下行

      ....lse,
      "bip": "172.15.1.6/24"   <<new non conflicting range
    }
    
    …lse,
    
    “bip”:“172.15.1.6/24”经过几次分支,并至少破坏了一次我的环境,我发现解决方案比我想象的更容易

  • 关闭Docker桌面服务
  • 在windows 10中的
    %userprofile%\.docker\deamon.json
    文件中添加了以下行

      ....lse,
      "bip": "172.15.1.6/24"   <<new non conflicting range
    }
    
    …lse,
    
    “bip”:“172.15.1.6/24”Windows上的Docker(使用Linux容器)有许多限制。Docker Desktop for Windows无法将流量路由到Linux容器。但是,您可以ping Windows容器。你是如何运行你的容器的?你能给我一个调试的例子吗?@matiferrigno为了测试我正在使用一个用docker run创建的ubuntu映像--net new_subnet_1-ti ubuntu/bin/sh
    一旦我在那里,我就可以使用各种工具来排除故障。docker在Windows上有很多限制(使用Linux容器)。Docker Desktop for Windows无法将流量路由到Linux容器。但是,您可以ping Windows容器。你是如何运行你的容器的?你能给我一个调试的例子吗?@matiferrigno为了测试我正在使用一个ubuntu映像,这个映像是用docker run--net new_subnet_1-ti ubuntu/bin/sh创建的。一旦我在那里,我就可以使用各种工具来排除故障。经过整整3天的调试、重新配置和更改Hyper-V网络配置,终于找到了这个答案,它的工作!非常感谢!:)经过整整3天的调试、重新配置和更改Hyper-V网络配置后,终于找到了这个答案,它成功了!非常感谢!:)