如何通过代理使用“docker登录”?

Lew*_*uce 7 proxy docker

我正在尝试运行docker login,但出现以下错误:

Error response from daemon: Get "https://[removed_id_for_stackoverflow].dkr.ecr.us-east-1.amazonaws.com/v2/": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
Run Code Online (Sandbox Code Playgroud)

我的~/.bash.rc文件中有以下内容:

export HTTP_PROXY="http://192.168.1.1:8080"
export HTTPS_PROXY="http://192.168.1.1:8080"
export https_proxy="http://192.168.1.1:8080"
export https_proxy="http://192.168.1.1:8080"
export ftp_proxy="http://192.168.1.1:8080"
export no_proxy="localhost,127.0.0.1,::1"
Run Code Online (Sandbox Code Playgroud)

如果我运行curl https://www.google.com,我可以获得有效的响应,确认这些设置有效。如果我删除这些环境变量,那么我的curl命令将不再起作用,所以我很确定从环境变量的角度来看它配置正确。

根据Docker Hub 在代理后面登录,您可以在运行时将代理选项传递到命令行中docker login;但是,我已经尝试过,结果是相同的。请参阅下面的示例:

root@my-host:~/.docker# HTTPS_PROXY=http://192.168.1.1:8080 aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin $(aws sts get-caller-identity --output text --query 'Account').dkr.ecr.us-east-1.amazonaws.com >/dev/null
Error response from daemon: Get "https://[removed_for_stack_overflow].dkr.ecr.us-east-1.amazonaws.com/v2/": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
Run Code Online (Sandbox Code Playgroud)

我尝试将代理设置更改为出现在之前docker login而不是aws,尝试使用HTTP_PROXY而不是HTTPS_PROXY,但仍然没有运气。指定代理选项的顺序似乎并不重要。

我还有一个名为的文件~/.docker/config.json,其中包含以下代理信息:

{
 "proxies":
 {
   "default":
   {
     "httpProxy": "http://192.168.1.1:8080",
     "httpsProxy": "http://192.168.1.1:8080"
   }
 }
}
Run Code Online (Sandbox Code Playgroud)

即使使用此设置,docker 登录似乎仍无法正常工作并提供相同的结果。

atl*_*ine 12

这里记录了docker daemon配置代理的正确方法,我摘录了一些内容供大家参考:

  1. 为 docker 服务创建一个 systemd 放置目录:

    sudo mkdir -p /etc/systemd/system/docker.service.d

  2. 创建一个名为/etc/systemd/system/docker.service.d/http-proxy.conf添加HTTP_PROXY/HTTPS_PROXY环境​​变量的文件:

    配置示例:

    [Service]
    Environment="HTTP_PROXY=http://proxy.example.com:80"
    Environment="HTTPS_PROXY=https://proxy.example.com:443"
    Environment="NO_PROXY=localhost,127.0.0.1,docker-registry.example.com,.corp"
    
    Run Code Online (Sandbox Code Playgroud)
  3. 刷新更改并重新启动 Docker

    sudo systemctl daemon-reload
    sudo systemctl restart docker
    
    Run Code Online (Sandbox Code Playgroud)
  4. 验证配置是否已加载并与您所做的更改相匹配,例如:

    sudo systemctl show --property=Environment docker