Docker Hub 在代理后面登录

KAL*_*LEX 5 proxy docker

我最近在我的 Ubuntu 17.10 VM 上安装了 Docker 18.04.0-ce。在代理后面工作时,我在尝试登录 Docker Hub 注册表时遇到了困难。所以当我跑步时:

docker login -u <username> -p <cool password>
Run Code Online (Sandbox Code Playgroud)

我收到这条消息:

Error response from daemon: Get https://registry-1.docker.io/v2/: net/http:  
request canceled while waiting for connection (Client.Timeout exceeded while 
awaiting headers)
Run Code Online (Sandbox Code Playgroud)

据我所做的研究得出的理解是,当您位于代理后面并且想要使用 Docker 时,即使设置了环境变量,您也需要相应地配置它:

http_proxy=<my_proxy>
https_proxy=<my_proxy>
HTTP_PROXY=<my_proxy>
HTTPS_PROXY=<my_proxy>
Run Code Online (Sandbox Code Playgroud)

其次,Docker 看起来有多个级别的代理配置,这意味着构建、容器和守护进程的不同配置。

我去配置了所有这些以匹配我的代理,但我仍然收到该消息。是的,我确实重新启动了服务和守护进程。

更新:

$ docker info

Containers: 8
 Running: 0
 Paused: 0
 Stopped: 8
Images: 12
Server Version: 18.04.0-ce
Storage Driver: overlay2
 Backing Filesystem: extfs
 Supports d_type: true
 Native Overlay Diff: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
 Volume: local
 Network: bridge host macvlan null overlay
 Log: awslogs fluentd gcplogs gelf journald json-file logentries splunk syslog
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: 773c489c9c1b21a6d78b5c538cd395416ec50f88
runc version: 4fc53a81fb7c994640722ac585fa9ca548971871
init version: 949e6fa
Security Options:
 apparmor
 seccomp
  Profile: default
Kernel Version: 4.13.0-39-generic
Operating System: Ubuntu 17.10
OSType: linux
Architecture: x86_64
CPUs: 1
Total Memory: 7.79GiB
Name: docker-vb
ID: 447I:6DFI:JZ7V:F6SZ:BUCB:IFB2:4HGT:MXK2:Y5H5:EECC:FIQN:SZOH
Docker Root Dir: /var/lib/docker
Debug Mode (client): false
Debug Mode (server): false
HTTP Proxy: http://<proxy_ip>:<proxy_port>
HTTPS Proxy: http://<proxy_ip>:<proxy_port>
Registry: https://index.docker.io/v1/
Labels:
Experimental: false
Insecure Registries:
 127.0.0.0/8
Live Restore Enabled: false
Run Code Online (Sandbox Code Playgroud)

小智 5

docker 登录通常需要使用 sudo 权限运行,因此请确保实际保留 HTTPS_PROXY 环境。简单地通过

export HTTPS_PROXY=<your proxy>
Run Code Online (Sandbox Code Playgroud)

或者简单地在命令行上传递它:

sudo HTTPS_PROXY=<your proxy> docker login -u <user> <registry>
Run Code Online (Sandbox Code Playgroud)

docker 守护进程不需要重新启动。上述工作正常(我们在工作中广泛使用代理)。

您的网络可达性、代理以及可能的注册表可能存在一些问题。docker日志可以提供一些线索:

乌班图:sudo journalctl -fu docker.service

RHEL:/var/log/messages | grep docker