Docker 仅在创建windows容器后暂时没有网络连接
问题: 我注意到一个问题,当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 主机上的网络适配器: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
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’
}
}
}