问题:
当Windows容器刚创建后,我注意到一个问题,它没有互联网连接-curl或ping无法访问google.com或网络中的服务器。重试几次后,容器将建立连接,从此开始,每次ping操作都会成功。 仅在Windows docker主机之一上会发生此问题。主机每次ping通时,问题仅在容器内且仅在创建后发生。 主机规格: Windows Server 2019 Standard版本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次。 com。
Run.bat文件:
FOR /L %%A IN (1,1,10) DO ( curl --retry 5 -v --fail http://google.com )
Dockerfile:
FROM mcr.microsoft. com/windows/servercore:1809
COPY run.bat .
RUN “run.bat”
并在循环中运行“ 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次重试后将成功。值得一提的是,每隔1秒从主机直接对主机ping Google时,它每次都可以正常运行几个小时。该问题仅出现在Windows容器中。
奇怪的是,我们还有两台其他计算机,它们具有相同的操作系统和相同的Docker桌面版本(不同的硬件),我们也在此处进行了测试,并且没有出现此问题。我认为这是多个网络适配器与Docker Desktop处理网络的方式之间的某种关联。我正在寻找解决方案