【发布时间】:2021-05-06 09:17:21
【问题描述】:
我正在寻找一些关于调试一些极其痛苦的 Docker 连接问题的建议。
特别是,对于 Azure DevOps Services Git 存储库,我正在运行一个自托管(本地)dockerized Linux CI(根据https://docs.microsoft.com/en-us/azure/devops/pipelines/agents/docker?view=azure-devops#linux 设置),几个月来一直运行良好。
这一切都在公司网络上运行,从上周开始,我的 docker 容器的网络连接变得非常不稳定:
-
具体来说,它会间歇性地断开网络连接,这也可以通过 Azure DevOps 代理的日志看到,然后继续尝试重新连接。
-
下载 Git LFS 对象时尤其会发生这种情况。通过 GIT_TRACE=1 启用额外的跟踪会突出显示许多连接失败和重试:
trace git-lfs: xfer: 无法从字节 N 继续下载“SHA”:预期状态代码 206,收到 200。从开始重新下载
-
在这样的 LFS 拉/取期间,有时容器甚至停止响应,因为
docker container list命令只响应:来自守护进程的错误响应:i/o 超时
因此,守护程序无法自行恢复,需要手动重启(以备份 CI)。
我还看到了网络性能的显着差异:
- 在不同机器上的容器实例(从同一映像创建)中手动克隆相同的 Git 存储库(包括 LFS 对象,全部从头开始),在我的开发笔记本电脑上花费不到 2 分钟(已连接从家里通过 VPN),而相同的操作在运行两台不同 Win10 机器的容器上可能需要长达 20 分钟 (!)(公司网络,实际位于办公室,因此没有 VPN。
- 显然这与主机网络连接本身无关,因为在容器外的相同 Win10 主机(公司网络/办公室)上进行克隆只需 14 秒!
因此我怀疑一些网络配置问题(例如 Hyper-V vEthernet 适配器?防火墙?代理?或其他任何误入歧途的看门狗?),但经过三天的调试,我不太确定如何进一步调查这个问题,因为我的想法和专业知识已经用完了。有什么想法/建议/提示吗?
我应该补充一点,LFS 配置选项 (such as lfs.concurrenttransfers and lfs.basictransfersonly) 并没有真正帮助,git config http.version 类似(或者只是删除一些较大的文件)
更新
它实际上似乎与自托管代理无关,而是我公司网络中更普遍的 docker network cfg 问题。
在我的 VPN 机器(在家中运行)上运行以下运行速度始终如一:
docker run -it
ubuntu bash -c "apt-get update; apt-get install -y wget; start=$SECONDS;
wget http://cdimage.ubuntu.com/lubuntu/releases/18.04/release/lubuntu-18.04-alternate-amd64.iso;
echo Duration: $(( SECONDS - start )) seconds"
与powershell下载对比(在主机上):
$start=Get-Date
$(New-Object
net.webclient).Downloadfile("http://cdimage.ubuntu.com/lubuntu/releases/18.04/release/lubuntu-18.04-alternate-amd64.iso",
"e:/temp/lubuntu-18.04-alternate-amd64.iso")
'Duration: {0:mm}
min {0:ss} sec' -f ($(Get-Date)-$start)
企业网络
- Docker:1560 秒(=26 分钟!)
- Windows 主机系统:持续时间:00 分 15 秒
开发笔记本电脑(VPN,在家):
- Docker:144 秒(=2 分 24 秒)
- Windows 主机系统:持续时间:02 分 16 秒
查看https://github.com/docker/for-win/issues/698 中讨论的问题(以及对我不起作用的建议解决方法),这似乎是 Windows / hyper-v 的一个重要问题..
【问题讨论】:
-
能否创建一个新的自托管代理再试一次,然后在这里分享结果?
-
它实际上似乎不是关于自托管代理,而是我公司网络中更普遍的 docker 网络问题。 - 见上面的更新
标签: docker hyper-v docker-for-windows docker-networking git-lfs