Docker push - net/http: TLS 握手超时
Docker push - net/http: TLS handshake timeout
我已经在 AWS EC2 Ubuntu 14.04 实例上部署了私有 docker 映像注册表。注册表使用 Let's Encrypt 证书进行保护。
不幸的是,我得到 net/http: TLS handshake timeout
的 docker push
操作超过 300 秒:
这是 time'd
命令的输出:
[luqo33@home-pc containers]$ time docker push <my-registry-domain:5000>/nginx
The push refers to a repository [<my-registry-domain:5000>/nginx]
dda5a806f0b0: Layer already exists
ec35cfccb7f7: Layer already exists
94c1a232bb3f: Layer already exists
6d6b9812c8ae: Layer already exists
695da0025de6: Retrying in 1 second
fe4c16cbf7a4: Pushing [================================================> ] 119 MB/123 MB
net/http: TLS handshake timeout
real 5m0.847s
user 0m0.097s
sys 0m0.017s
regsitry:2
容器的日志没有显示任何错误 - 除了接收数据时出现意外 EOF 的通知。 5分钟以内的图片我也可以毫无问题地推送。
我怀疑这是系统设置的问题,因为超时总是在操作超过 300 秒时发生。没有任何负载平衡器或其他代理。 <my-registry-domain:5000>
直接指向服务器IP。
我该如何进一步调查并采取可能的补救措施?
编辑
当我将图像推送到其他服务器提供商 (DigitalOcean)、AWS ECS 注册表甚至 Docker Hub 时,也会发生同样的情况!我很难相信 Docker 客户端会有 300 秒的内置握手超时。
我在想也许我应该开始在网络级别寻找解决方案 - 使用我的硬件(wi-fi 路由器)或我的 ISP。
有人知道这里发生了什么吗?
我遇到了同样的问题,这个问题可能是由您的互联网连接引起的,我通过在 dockerd 中 将并发上传(get 下载)减少到 1 来解决它。
通过使用这些参数:
--max-concurrent-downloads (default: 3) Set the max concurrent downloads for each pull
--max-concurrent-uploads (default: 5) Set the max concurrent uploads for each push
如果您的带宽较低,同时上传 5 张图片可能会超时。
https://docs.docker.com/engine/reference/commandline/dockerd/
只是为那些可能在托管构建环境(如基于 https://github.com/actions/virtual-environments/issues/2152#issuecomment-736325518
的 Azure Devops 上处理它的人添加一个单独的答案
更改设置如下
sudo sed -i 's/ }/, \"max-concurrent-uploads\": 1 }/' /etc/docker/daemon.json
sudo systemctl restart docker
我已经在 AWS EC2 Ubuntu 14.04 实例上部署了私有 docker 映像注册表。注册表使用 Let's Encrypt 证书进行保护。
不幸的是,我得到 net/http: TLS handshake timeout
的 docker push
操作超过 300 秒:
这是 time'd
命令的输出:
[luqo33@home-pc containers]$ time docker push <my-registry-domain:5000>/nginx
The push refers to a repository [<my-registry-domain:5000>/nginx]
dda5a806f0b0: Layer already exists
ec35cfccb7f7: Layer already exists
94c1a232bb3f: Layer already exists
6d6b9812c8ae: Layer already exists
695da0025de6: Retrying in 1 second
fe4c16cbf7a4: Pushing [================================================> ] 119 MB/123 MB
net/http: TLS handshake timeout
real 5m0.847s
user 0m0.097s
sys 0m0.017s
regsitry:2
容器的日志没有显示任何错误 - 除了接收数据时出现意外 EOF 的通知。 5分钟以内的图片我也可以毫无问题地推送。
我怀疑这是系统设置的问题,因为超时总是在操作超过 300 秒时发生。没有任何负载平衡器或其他代理。 <my-registry-domain:5000>
直接指向服务器IP。
我该如何进一步调查并采取可能的补救措施?
编辑
当我将图像推送到其他服务器提供商 (DigitalOcean)、AWS ECS 注册表甚至 Docker Hub 时,也会发生同样的情况!我很难相信 Docker 客户端会有 300 秒的内置握手超时。
我在想也许我应该开始在网络级别寻找解决方案 - 使用我的硬件(wi-fi 路由器)或我的 ISP。
有人知道这里发生了什么吗?
我遇到了同样的问题,这个问题可能是由您的互联网连接引起的,我通过在 dockerd 中 将并发上传(get 下载)减少到 1 来解决它。 通过使用这些参数:
--max-concurrent-downloads (default: 3) Set the max concurrent downloads for each pull
--max-concurrent-uploads (default: 5) Set the max concurrent uploads for each push
如果您的带宽较低,同时上传 5 张图片可能会超时。
https://docs.docker.com/engine/reference/commandline/dockerd/
只是为那些可能在托管构建环境(如基于 https://github.com/actions/virtual-environments/issues/2152#issuecomment-736325518
的 Azure Devops 上处理它的人添加一个单独的答案更改设置如下
sudo sed -i 's/ }/, \"max-concurrent-uploads\": 1 }/' /etc/docker/daemon.json
sudo systemctl restart docker