Docker 仅在创建windows容器后暂时没有网络连接

Docker 仅在创建windows容器后暂时没有网络连接,docker,docker-networking,docker-desktop,Docker,Docker Networking,Docker Desktop,问题: 我注意到一个问题,当windows容器刚创建完就没有互联网连接时,curl或ping无法连接到google.com或网络中的服务器。在几次重试之后,容器获得连接,从这一点上,ping每次都是成功的。 此问题仅在一台windows docker主机上发生。主机每次ping时,问题仅在容器内发生,并且仅在创建之后发生。 主机规格: Windows Server 2019标准,版本1809,操作系统版本:17763.1369 Docker Desktop 2.4.0.0稳定,引擎19.03.1

问题:

我注意到一个问题,当windows容器刚创建完就没有互联网连接时,curl或ping无法连接到google.com或网络中的服务器。在几次重试之后,容器获得连接,从这一点上,ping每次都是成功的。 此问题仅在一台windows docker主机上发生。主机每次ping时,问题仅在容器内发生,并且仅在创建之后发生。 主机规格: Windows Server 2019标准,版本1809,操作系统版本:17763.1369 Docker Desktop 2.4.0.0稳定,引擎19.03.13,组件1.27.4 主机上的网络适配器:

PS C:\Windows\system32> Get-NetAdapter

Name                      InterfaceDescription                    ifIndex Status       MacAddress             LinkSpeed
----                      --------------------                    ------- ------       ----------             ---------
bond0                     Microsoft Network Adapter Multiplexo...      10 Up           **        2 Gbps
vEthernet (Ethernet)                                                   38 Up          **        10 Gbps
Ethernet                  Intel(R) I350 Gigabit Network Connec...       9 Up           **         1 Gbps
Ethernet 2                Intel(R) I350 Gigabit Network Conn...#2       7 Up           **         1 Gbps
vEthernet (nat)           Hyper-V Virtual Ethernet Adapter             11 Up           **       10 Gbps
复制步骤:

在servercore镜像上构建容器并ping 10次google。com

Run.bat文件:

Dockerfile:

在循环中运行“docker build”命令来创建容器,在容器内ping 10次google,杀死容器并再次运行。我如何从Jenkinsfile执行此操作的示例:

timeout(time: 1, unit: ‘HOURS’) {

    node(“problematicWindowsHost”) {

        while (true) {

            docker.build(“pinger”, “-f Dockerfile --no-cache .”)

            sleep time: 1, unit: ‘SECONDS’
        }
    }
}
结果: 运行该命令1小时后,本地第一个curl命令将失败,重试2次后将成功。值得一提的是,当im在一个循环中每1秒直接从主机ping google时,它每次都会工作,连续几个小时。该问题仅在windows容器中出现

奇怪的是,我们还有另外两台机器使用相同的操作系统和相同的Docker桌面版本(不同的硬件),我们也在那里进行了测试,但问题并没有出现。我认为多个网络适配器和Docker Desktop处理网络的方式之间存在某种关联。我在寻找解决办法

FROM mcr.microsoft. com/windows/servercore:1809
COPY run.bat .
RUN “run.bat”
timeout(time: 1, unit: ‘HOURS’) {

    node(“problematicWindowsHost”) {

        while (true) {

            docker.build(“pinger”, “-f Dockerfile --no-cache .”)

            sleep time: 1, unit: ‘SECONDS’
        }
    }
}