如何在代理环境下执行docker login命令登录AWS ECR镜像仓库
问题根因
Docker 执行docker login的网络请求由后台Docker daemon服务发起,你配置的Shell环境变量、~/.docker/config.json属于Docker客户端侧的配置,不会被daemon进程读取,因此代理不生效导致连接超时。
解决步骤
- 配置Docker daemon代理
使用systemd管理Docker服务的Linux发行版,执行以下操作:
- 创建代理配置目录(如果不存在)
sudo mkdir -p /etc/systemd/system/docker.service.d
- 新建代理配置文件
/etc/systemd/system/docker.service.d/http-proxy.conf,写入以下内容:
[Service] Environment="HTTP_PROXY=http://192.168.1.1:8080" Environment="HTTPS_PROXY=http://192.168.1.1:8080" Environment="NO_PROXY=localhost,127.0.0.1,::1,169.254.169.254"
注:
169.254.169.254是AWS实例元数据地址,加入NO_PROXY避免AWS CLI调用时走代理导致异常。如果有其他内网地址不需要走代理,也可以追加到这个参数里。
- 重载配置并重启Docker服务
sudo systemctl daemon-reload sudo systemctl restart docker
验证配置生效
执行docker info命令,查看输出末尾的HTTP Proxy、HTTPS Proxy、No Proxy字段,确认和你配置的代理信息一致。重新执行ECR登录命令即可正常完成登录。
额外说明
你之前在命令行前缀添加HTTPS_PROXY变量的操作,仅对当前Shell启动的进程生效,无法传递给后台运行的Docker daemon,因此不会生效。
内容的提问来源于stack exchange,提问作者LewlSauce
相关产品推荐
相关产品推荐

