Docker

Docker 登錄 AWS ECR 失敗並顯示“dial tcp xxxx:443: i/o timeout”

  • April 6, 2018

我正在逐步完成“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_PROXY變數HTTPS_PROXY

我還嘗試斷開與 corp 網路的連接,取消設置該文件中的兩個 var 設置,重新載入守護程序,重新啟動 docker 服務,然後重新執行命令行。我得到了完全相同的錯誤。

我還能做些什麼來診斷這個?

更新

因為想不出還有什麼可以嘗試的,所以我從 1.12.6 升級到了 18.03.0-ce。結果是一樣的。我在 config.json 中指定了我們的代理主機:埠,如文件中所述。當我嘗試不使用我們的代理(手機上的 wifi 熱點)進行連接時,我刪除了該設置。

我終於想通了。我在本說明中沒有提到的是我在 VirtualBox VM 中執行此操作。

唯一可行的方法是,如果我在沒有公司防火牆的情況下使用手機上的熱點進行連接。我沒有意識到,當我與之連接時,我還必須更改 VM 上的網路連接。在公司防火牆內,它必須是 NAT,但是當我不在公司網路中時,它必須被橋接。取消設置代理環境變數後,我就能夠生成並成功完成 aws ecr docker login 命令。

你重新載入systemd了嗎?

systemctl daemon-reload

如果您的文件正確,您應該能夠在重新載入後進行測試

systemctl show --property Environment docker

如果是這樣,docker restart 應該通過代理工作

引用自:https://serverfault.com/questions/905392