docker無法拉取(pull)映象Error response from daemon

蟹蟹蟹蟹發表於2024-08-25

docker無法拉取(pull)映象 | 校園網 | 內網 | 代理 | Error response from daemon: Get https://registry-1.docker.io/v2

該部落格的方法適用解決下列 bugs:

# Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting heade rs).

# Error response from daemon: Get "https://registry-1.docker.io/v2/": dial tcp [2600:1f18:2148:bc01:20a3:9c3e:d4a7:9fb]:443: i/o timeout

# Error response from daemon: Get "https://registry-1.docker.io/v2/": net/http: TLS handshake timeout
# 參考部落格:https://blog.csdn.net/qq_51762470/article/details/138588514,https://cloud.tencent.com/developer/article/1644463,

  

場景:

學生使用者,使用校園網只能登入認證登入,學校伺服器在內網裡,但希望讓伺服器上網:
1、登入校園網認證
2、走主機的代理。(自己的主機登入校園網認證,再讓伺服器走自己主機的代理)

# 簡單的臨時代理。 值得注意的是,要設定好代理伺服器,讓區域網的裝置,可以透過這個代理埠上網,建議找一下教程
export http_proxy=http://你的代理伺服器ip:埠
export https_proxy=http://你的代理伺服器ip:埠

解決步驟:

step1: 首先排除配置國內映象源的原因,建議先配置映象源。

vim /etc/docker/daemon.json #自己編輯新增映象源
# 或者直接使用命令新增映象源
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"experimental": false,
"debug": true,
"registry-mirrors": ["https://6kx4zyno.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

如果配置了映象源還無法拉取映象,就繼續看step2。

step2: 配置docker配置檔案。

如果伺服器是透過代理的方式進行上網,則需要格外的配置docker代理-即修改docker的配置檔案。
docker拉取映象的時候,不走系統配置的代理環境,所以需要單獨配置它的代理檔案。

檢查docker代理配置的倆個命令:

systemctl show --property=Environment docker #檢視代理配置
# 或者
docker info #檢視配置選項

若顯示Environment為空,則進行配置。

# 1. 建立或者覆蓋掉原來的docker預設配置

sudo mkdir -p /etc/systemd/system/docker.service.d #建立
vim /etc/systemd/system/docker.service.d/http-proxy.conf #建立或者修改這個檔案

# 2. 配置自己的代理環境

[Service]
Environment="HTTP_PROXY=http://proxy.example.com:80"
Environment="HTTPS_PROXY=https://proxy.example.com:443"
#自己建了私有的映象倉庫,需要 dockerd 繞過代理伺服器直連,那麼配置 NO_PROXY 變數:
Environment="NO_PROXY=your-registry.com,10.10.10.10,*.example.com"

#因為我裡用clash 開的代理,htpps是預設的7890,http是7890,所以我的配置如下:

[Service]
Environment="HTTP_PROXY=http://127.0.0.1:7890"
Environment="HTTPS_PROXY=http://127.0.0.1:7890"

# 需要注意一點,https的代理埠不一定要和http一樣,除非你確保https也走那個埠,不然走http埠協議有時候是不能處理https資料的,這也是導致配置完不能拉取映象的原因之一

# 3. 載入配置重啟docker

sudo systemctl daemon-reload
sudo systemctl restart docker
docker info #檢視有沒有配置成功

相關文章