Docker 登录 AWS ECR 失败,并显示“dial tcp xxxx:443: i/o timeout”

Docker 登录 AWS ECR 失败,并显示“dial tcp xxxx:443: i/o timeout”

我正在逐步学习“Scaling Docker for AWS”课程,该课程指定使用“ aws ecr get-login”来获取“ docker login”命令行。

我正在运行docker版本1.12.6。

当我运行输出命令行时,它指定一个“AWS”用户和一个长密码以及“amazonaws.com”域中的 https url,我得到如下内容:

Error response from daemon: Get https://....amazonaws.com/v1/users/: dial tcp xx.xx.xx.xx:443: i/o timeout

然后我尝试直接 curl 到 fqhn,并且连接上了,但是返回了 401(这并不奇怪,因为我在 curl 调用中没有发送任何凭据)。

我还用来nslookup验证 fqhn 是否解析为错误消息中指定的 IP 地址(以及另外两个 IP 地址)。

请注意,目前我正在公司防火墙后面运行它。在“ /etc/systemd/system/docker.service.d”中,我有一个“ http-proxy.conf”文件,我认为它正确设置了HTTP_PROXYHTTPS_PROXY环境变量。

我还尝试断开公司网络,取消该文件中的两个 var 设置,重新加载守护进程,重新启动 docker 服务,然后重新运行命令行。我得到了完全相同的错误。

我还能做什么来诊断这个问题?

更新

因为我想不出还有什么可以尝试的,所以我从 1.12.6 升级到了 18.03.0-ce。结果是一样的。我按照文档中的描述在 config.json 中指定了我们的代理主机:端口。当我尝试不使用我们的代理(手机上的 wifi 热点)进行连接时,我删除了该设置。

答案1

您重新加载了 systemd 吗?

systemctl daemon-reload

重新加载后,您应该能够测试文件是否正确

systemctl show --property Environment docker

如果是这样,docker restart 应该可以通过代理进行

答案2

我终于搞明白了。我在本说明中没有提到的是,我是在 VirtualBox VM 中执行此操作的。

唯一可行的方法是,如果我不使用公司防火墙,而是使用手机上的热点进行连接。我没有意识到的是,当我使用手机热点进行连接时,我还必须更改虚拟机上的网络连接。在公司防火墙内,必须是 NAT,但当我不在公司网络中时,必须是桥接。一旦我取消设置我的代理环境变量,我就可以生成并成功完成 aws ecr docker login 命令。

相关内容