Docker配置代理訪問網路ubuntu24.04

溺死在幸福里的猪發表於2024-10-02

本文將詳細介紹如何根據系統代理配置,正確設定 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:指定不需要透過代理的地址列表,包括本地主機 localhost127.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

相關文章