問題
如果母機的網(wǎng)絡(luò)環(huán)境是需要配置代理才能夠訪問互聯(lián)網(wǎng)的話尤误,那安裝docker后茎截,去拉取鏡像大概率會失敗驾霜。
類似如下的錯誤:
guest@guest-PC:~$ docker pull ubuntu:latest
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)
問題原因
母機通過代理訪問外網(wǎng)時,一般在命令行中通過 export 來設(shè)置代理
export http_proxy=http://*****:8080
export https_proxy=http://*****:8080
而 docker拉取鏡像是通過 docker daemon 服務(wù)完成凡傅,docker daemon 服務(wù)是在另一個進程中,不會讀取當(dāng)前shell 命令行的代理肠缔,所以 docker pull 會失敗夏跷。
解決方案
1哼转、在
/etc/systemd/system/docker.service.d/http-proxy.conf
配置文件中添加代理信息
2、重啟docker服務(wù)
具體操作如下:
- 創(chuàng)建 dockerd 相關(guān)的 systemd 目錄槽华,這個目錄下的配置將覆蓋 dockerd 的默認(rèn)配置
$ sudo mkdir -p /etc/systemd/system/docker.service.d
- 新建配置文件 /etc/systemd/system/docker.service.d/http-proxy.conf 內(nèi)容如下:
[Service]
Environment="HTTP_PROXY=http://*****.com:80"
Environment="HTTPS_PROXY=https://*****.com:443"
tips: 如果文件已經(jīng)存在壹蔓,可直接修改文件內(nèi)容,添加相關(guān)代理設(shè)置
如果有不需要代理的地址猫态,可添加 NO_PROXY 配置:
[Service]
Environment="HTTP_PROXY=http://*****.com:80"
Environment="HTTPS_PROXY=https://*****.com:443"
Environment="NO_PROXY=your-registry.com,*.*.*.*,*.example.com"
多個 NO_PROXY 變量的值用逗號分隔佣蓉,而且可以使用通配符(),極端情況下亲雪,如果 NO_PROXY=勇凭,那么所有請求都將不通過代理服務(wù)器
- 重新加載配置文件,重啟 dockerd 服務(wù)
$ sudo systemctl daemon-reload
$ sudo systemctl restart docker
-
docker info 查看配置結(jié)果
image.png
結(jié)論:
docker 鏡像由 docker daemon 管理义辕,所以不能用修改 shell 環(huán)境變量的方法使用代理服務(wù)虾标,而是從 systemd 角度設(shè)置環(huán)境變量
參考資料
1、https://docs.docker.com/config/daemon/systemd/#httphttps-proxy
2灌砖、https://www.lfhacks.com/tech/pull-docker-images-behind-proxy/