如何配置Docker通過代理去pull鏡像
概述
如果Docker所在宿主機無法直接與互聯網連通,需要通過代理去上網的話,直接通過docker pull xxx拉取鏡像將會失敗, 本文主要是記錄一下如何配置代理服務器讓Docker能夠正常拉取外網鏡像。
說明: 本文幾乎完全照抄官方文檔(官方文檔已經寫得非常詳細,建議直接參考 https://docs.docker.com/engine/daemon/proxy/#httphttps-proxy)
注:建議網上找參考資料,首選官方文檔,可以避免走彎路。
問題現象
直接拉取鏡像,報錯如下:
# docker pull nginx
Using default tag: 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)
環境描述
- 宿主機操作系統: Ubuntu22.04
- Docker 版本: 28.0.1
配置代理具體步驟
(1) 配置 http-proxy.conf
# mkdir -p /etc/systemd/system/docker.service.d
# vim /etc/systemd/system/docker.service.d/http-proxy.conf
添加以下內容
[Service]
Environment="HTTP_PROXY=http://proxy.example.com:3128" # 這里填自己真實的代理
Environment="HTTPS_PROXY=http://proxy.example.com:3128"
# 如果有內部鏡像服務器,可以配置`NO_PROXY`參數, 比如
Environment="NO_PROXY=localhost,127.0.0.1,docker-registry.example.com,.corp" # 多個地址用,號隔開
(2)重啟docker服務
# systemctl daemon-reload
systemctl restart docker.service
# docker pull nginx
Using default tag: latest
latest: Pulling from library/nginx
38513bd72563: Pull complete
10d18f46ee87: Pull complete
a8d825a0683a: Pull complete
a131bc1d4bd5: Pull complete
3818929ac19f: Pull complete
1498b1cfda15: Pull complete
c50c84d0ed4d: Pull complete
Digest: sha256:029d4461bd98f124e531380505ceea2072418fdf28752aa73b7b273ba3048903
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest
#
至此,docker 已經可以正常拉取外網鏡像。
特別需要注意的是, 這是docker daemon 訪問外網配置代理的方法, 不是docker container 訪問外網的配置方法!

浙公網安備 33010602011771號