本文將詳細介紹如何根據系統代理配置,正確設定 Docker 的代理環境變數,使其能夠透過代理伺服器進行網路訪問。
一、檢視系統代理配置
首先,我們檢視了系統的代理配置:
以下是圖片內容的文字描述:
Proxy 設定
- Network Proxy: 已開啟
- Configuration: 手動 (Manual)
HTTP Proxy
- URL:
127.0.0.1
- Port:
20171
HTTPS Proxy
- URL: (未填寫)
- Port:
0
FTP Proxy
- URL: (未填寫)
- Port:
0
SOCKS Host
- URL:
127.0.0.1
- Port:
20170
Ignored Hosts
localhost, 127.0.0.0/8, ::1
根據配置介面,可以看到:
- Network Proxy: 已經啟用。
- HTTP Proxy: 代理伺服器地址是
127.0.0.1
,埠是20171
。 - SOCKS Host: 代理伺服器地址是
127.0.0.1
,埠是20170
。
為了確保 Docker 可以透過該代理進行網路訪問,我們需要將這些配置應用到 Docker 的環境變數中。
二、為 Docker 配置代理
1. 建立 Docker 代理配置目錄
首先,為 Docker 服務建立一個代理配置目錄(如果不存在):
sudo mkdir -p /etc/systemd/system/docker.service.d
2. 建立並編輯 http-proxy.conf
配置檔案
使用 vim
或其他編輯器建立並編輯 /etc/systemd/system/docker.service.d/http-proxy.conf
檔案:
sudo vim /etc/systemd/system/docker.service.d/http-proxy.conf
在檔案中新增以下內容,根據系統代理設定進行了詳細配置:
[Service]
Environment="HTTP_PROXY=http://127.0.0.1:20171/"
Environment="HTTPS_PROXY=http://127.0.0.1:20171/"
Environment="NO_PROXY=localhost,127.0.0.0/8,::1"
配置說明:
HTTP_PROXY
:指定 HTTP 代理地址,使用127.0.0.1:20171
,與系統代理設定一致。HTTPS_PROXY
:指定 HTTPS 代理地址,仍然使用127.0.0.1:20171
,確保 Docker 可以透過代理進行 HTTPS 請求。NO_PROXY
:指定不需要透過代理的地址列表,包括本地主機localhost
、127.0.0.0/8
和 IPv6 本地地址::1
。
3. 重新載入 systemd 並重啟 Docker 服務
配置完成後,重新載入 systemd 配置,並重啟 Docker 服務,使更改生效:
sudo systemctl daemon-reload
sudo systemctl restart docker
4. 驗證代理配置是否生效
使用以下命令驗證 Docker 是否正確使用了代理設定:
docker info | grep -i proxy
如果配置成功,你應該會看到類似以下的輸出:
HTTP Proxy: http://127.0.0.1:20171/
HTTPS Proxy: http://127.0.0.1:20171/
No Proxy: localhost,127.0.0.0/8,::1
四、使用
透過上述步驟,我們成功將系統代理設定應用到了 Docker 中,使得 Docker 可以透過指定的代理伺服器進行網路訪問。在複雜網路環境中,這種配置可以有效地解決 Docker 訪問網路超時、無法連線 Docker Hub 等問題。
進而我們可以正常使用 docker 命令而不用擔心網路問題了:
docker search nvidia/cuda:12.4.1-cudnn-devel-ubuntu22.04
docker image pull nvidia/cuda:12.4.1-cudnn-devel-ubuntu22.04