背景
將docker的服務器環境切換到新的網絡之后,由於服務器的internet是受限制的(需要連接配置遠程代理,不能直接上網)。因此,在使用docker連接docker hub 的時候,就會出錯:
錯誤細節如下:
[root@CNCGTCFS76 system]# docker login Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one. Username: xxx Password: xxx Error response from daemon: Get https://registry-1.docker.io/v2/: proxyconnect tcp: dial tcp :443: getsockopt: connection refused
在網上搜索過一番之后,發現: 如果在docker 宿主機上設置了代理(HTTP、HTTPS)之后,在docker daemon 啟動的時候,也要相應的告知 daemon,使用代理來訪問internet!!
解決方案
如上,就是在docker daemon 啟動的時候告知她,我們要是有HTTP或者HTTPS代理!!
盡管docker daemon 的配置可以兩種方式來實現:
一. 通過daemon.json 文件來修改
二. 通過覆蓋docker.service
file來實現
但是對於代理的配置,目前為止(docker 17.06)我們只能使用第二個方案。 具體的步驟如下。。。
1. 創建 docker.service.d 目錄
$ mkdir -p /etc/systemd/system/docker.service.d
2. 創建HTTP 或者HTTPS 代理文件
HTTP:
vim /etc/systemd/system/docker.service.d/http-proxy.conf
HTTPS:
vim /etc/systemd/system/docker.service.d/https-proxy.conf
由於我這里用的是 “HTTPS”,所以只給大家演示HTTPS代理的配置,對於HTTP代理的修改,非常相似,大家可以參考我最后貼出來的連接。
3. 修改 https-proxy.conf 文件
[Service] Environment="HTTPS_PROXY=xxx.xxx.xxx.xxx:443" "NO_PROXY=localhost,127.0.0.1,xxx.xxxxxx:5000"
解析:
主要是兩點內容:
① HTTPS_PROXY 將它的值對應到您所希望設置的代理服務地址和端口(例如: HTTPS_PROXY=https://proxy.example.com:443
),我這里為了保護隱私,就用xxx代替.
② NO_PROXY 意味着某些情況下我們不需要使用HTTPS代理來訪問,一般這就配置私有倉庫的路徑(例如:NO_PROXY=localhost,127.0.0.1,mydocker-registry.com:5000
)
4. 完成修改后保存/刷新
###Flush changes: #systemctl daemon-reload ###Restart Docker: #systemctl restart docker
5. 查看修改結果
#systemctl show --property=Environment docker Environment=HTTPS_PROXY=xxx.xxx.xxx.xxx:443 NO_PROXY=localhost,127.0.0.1,mydocker-registry.com:5000
6. 重新登陸 docker hub
docker login -u xxx -p xxx Login Succeeded
我們可以看到,docker hub 已經可以訪問嘍!!
感謝大家的收看,歡迎大家留言交流與頂貼 :)
參考文獻
https://docs.docker.com/engine/admin/systemd/