亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

docker設(shè)置代理以及配置鏡像加速方式

 更新時間:2025年08月17日 17:19:08   作者:vortex5  
proxychains無法代理Docker?Daemon的網(wǎng)絡(luò)請求,因其獨(dú)立運(yùn)行且依賴自身配置(如HTTP_PROXY環(huán)境變量或daemon.json),需通過Docker原生代理設(shè)置或國內(nèi)鏡像加速器解決,前者需配置守護(hù)進(jìn)程或容器環(huán)境變量,后者提升拉取速度但穩(wěn)定性可能受限

為什么proxychains對docker無效?

在使用 proxychains 嘗試讓 docker pull 通過代理拉取鏡像時,常常發(fā)現(xiàn)代理并未生效,拉取速度依然很慢。其根本原因在于 Docker 的架構(gòu)和 proxychains 的工作機(jī)制不兼容。

以下是詳細(xì)的底層原理分析:

Docker 的運(yùn)行機(jī)制

  • Docker 客戶端通過命令行工具(如 docker pull)與 Docker Daemon 通信,后者負(fù)責(zé)實際的鏡像拉取、推送等操作。
  • Docker Daemon 是一個獨(dú)立的守護(hù)進(jìn)程,通常由 systemd 管理,運(yùn)行在宿主機(jī)上,而不是直接在用戶終端環(huán)境中運(yùn)行。
  • proxychains 是一個基于動態(tài)鏈接庫(如 LD_PRELOAD)的代理工具,它通過攔截應(yīng)用程序的網(wǎng)絡(luò)請求來強(qiáng)制走代理。然而,proxychains 僅對直接運(yùn)行在用戶終端環(huán)境下的進(jìn)程有效,無法影響 Docker Daemon 的網(wǎng)絡(luò)行為。

為何 proxychains 不生效

  • 當(dāng)執(zhí)行 proxychains docker pull 時,proxychains 僅代理了 docker 客戶端命令的網(wǎng)絡(luò)請求,而 Docker Daemon 的實際網(wǎng)絡(luò)操作(如拉取鏡像)并未經(jīng)過 proxychains 的攔截。
  • Docker Daemon 的網(wǎng)絡(luò)請求由其自身的配置決定(如 HTTP_PROXY 環(huán)境變量或 daemon.json 設(shè)置),而非用戶終端的環(huán)境變量。
  • 因此,proxychains 無法直接控制 Docker Daemon 的網(wǎng)絡(luò)行為,導(dǎo)致 docker pull 不走代理。

解決思路

  • 要讓 docker pull 使用代理,必須通過 Docker 自身的代理配置機(jī)制,設(shè)置 Docker Daemon 的環(huán)境變量。
  • 對于 docker builddocker run,需要分別配置容器構(gòu)建或運(yùn)行時的代理環(huán)境變量。
  • 如果需要使用 socks5 代理(如 proxychains 常用的代理類型),需將 socks5 轉(zhuǎn)換為 http 代理(如通過 polipo),因為 Docker 目前僅支持 http、httpsftp 協(xié)議的代理。

國內(nèi)鏡像加速方案

在國內(nèi)訪問 Docker Hub 速度較慢時,可以通過配置鏡像加速器來提升 docker pull 的速度。以下是具體步驟:

配置國內(nèi)鏡像加速器

編輯 /etc/docker/daemon.json 文件,添加鏡像加速地址:

{
  "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
}

其他可選的鏡像加速服務(wù)包括:

保存后重啟 Docker 服務(wù):

sudo systemctl daemon-reload
sudo systemctl restart docker

注意事項

  • 2024 年 6 月以來,國內(nèi)鏡像站的穩(wěn)定性可能存在波動,建議測試多個鏡像地址,選擇效果最佳的。
  • 如果鏡像加速器不可用或速度不理想,可直接配置代理訪問 Docker Hub。

設(shè)置 Docker 代理的幾種方案

以下是針對 docker pull、docker push、docker builddocker run 的代理設(shè)置方法,適用于 Docker 17.07 及以上版本。

1. 為docker pull和docker push設(shè)置代理

由于 docker pulldocker push 的網(wǎng)絡(luò)請求由 Docker Daemon 直接處理,需通過 systemd 配置 Docker Daemon 的環(huán)境變量。

步驟

創(chuàng)建 systemd 配置文件目錄:

sudo mkdir -p /etc/systemd/system/docker.service.d

創(chuàng)建代理配置文件:

sudo vim /etc/systemd/system/docker.service.d/http-proxy.conf

添加以下內(nèi)容:

[Service]
Environment="HTTP_PROXY=http://127.0.0.1:8123"
Environment="HTTPS_PROXY=http://127.0.0.1:8123"
  • 這里的 127.0.0.1:8123 是宿主機(jī)的 HTTP 代理地址和端口,需根據(jù)實際代理服務(wù)配置。
  • 如果使用 socks5 代理,需通過工具(如 polipo)將其轉(zhuǎn)換為 HTTP 代理。

應(yīng)用配置并重啟 Docker 服務(wù):

sudo systemctl daemon-reload
sudo systemctl restart docker

驗證環(huán)境變量是否生效:

sudo systemctl show --property=Environment docker

輸出應(yīng)包含配置的 HTTP_PROXYHTTPS_PROXY 變量。

注意

  • 代理設(shè)置僅對 Docker Daemon 的網(wǎng)絡(luò)請求生效(如 docker pulldocker push)。
  • 如果代理地址發(fā)生變化,需重新編輯配置文件并重啟服務(wù)。
  • 確認(rèn)代理服務(wù)支持 httphttps 協(xié)議,Docker 不支持直接使用 socks5。

2. 為docker build設(shè)置代理

docker build 的代理設(shè)置需要在構(gòu)建鏡像時通過 --build-arg 參數(shù)傳遞代理環(huán)境變量。

方法

1.使用 --build-arg 參數(shù)指定代理:

docker build --build-arg http_proxy=http://172.17.0.1:8123 \
             --build-arg https_proxy=http://172.17.0.1:8123 \
             -t image_name .
  • 默認(rèn)情況下,Docker 使用 bridge 網(wǎng)絡(luò)模式,容器無法直接訪問宿主機(jī)的 127.0.0.1。因此,需使用 Docker 默認(rèn)網(wǎng)橋 docker0 的 IP 地址(通常為 172.17.0.1)。
  • 確認(rèn)代理地址是宿主機(jī)上的 HTTP 代理服務(wù)地址。

2.使用 --network=host 模式:

如果在構(gòu)建時指定 --network=host,容器將與宿主機(jī)共享網(wǎng)絡(luò),可直接使用 127.0.0.1

docker build --network=host \
             --build-arg http_proxy=http://127.0.0.1:8123 \
             --build-arg https_proxy=http://127.0.0.1:8123 \
             -t image_name .

注意

  • 代理設(shè)置僅在構(gòu)建過程中生效,構(gòu)建完成的鏡像不會自動繼承這些環(huán)境變量。
  • 如果 Dockerfile 中需要訪問外部網(wǎng)絡(luò)(如下載依賴),需確保代理地址有效。

3. 為docker run設(shè)置代理(全局配置方式)

Docker 17.07 及以上版本支持通過 ~/.docker/config.json 配置全局代理,適用于 docker builddocker run 創(chuàng)建的容器。

步驟

編輯 ~/.docker/config.json

vim ~/.docker/config.json

添加以下內(nèi)容:

{
  "proxies": {
    "default": {
      "httpProxy": "http://172.17.0.1:8123",
      "httpsProxy": "http://172.17.0.1:8123",
      "noProxy": "localhost,127.0.0.1,.daocloud.io"
    }
  }
}
  • httpProxyhttpsProxy:指定代理地址,默認(rèn)網(wǎng)橋模式下使用 172.17.0.1。
  • noProxy:設(shè)置不需要走代理的地址,防止本地通信被代理攔截。

生效方式

  • 配置保存后,Docker 會自動應(yīng)用代理設(shè)置到新創(chuàng)建的容器,無需重啟服務(wù)。
  • 新創(chuàng)建的容器會繼承 http_proxy、https_proxyno_proxy 環(huán)境變量。

注意

如果容器無需使用代理,可在容器內(nèi)清空環(huán)境變量:

export http_proxy=""
export https_proxy=""
  • 一旦 config.json 存在,所有新創(chuàng)建的容器都會默認(rèn)使用配置的代理。若需禁用代理,可臨時重命名或刪除 config.json
  • 容器創(chuàng)建時的代理設(shè)置會被“固化”到容器中,即使后續(xù)修改 config.json,已有容器的代理設(shè)置不會改變。

4. 容器內(nèi)使用宿主機(jī)代理的多種方法

以下方法適用于在容器運(yùn)行時(docker run)使用宿主機(jī)的代理服務(wù)。

方法一:在容器內(nèi)手動設(shè)置代理(推薦)

在容器內(nèi)設(shè)置環(huán)境變量:

export ALL_PROXY="socks5://172.17.0.1:1080"
  • 使用 172.17.0.1 訪問宿主機(jī)的代理服務(wù)(默認(rèn) bridge 模式)。
  • 如果代理是 socks5,需確保容器內(nèi)的工具支持 socks5 協(xié)議,或通過 polipo 轉(zhuǎn)換為 HTTP 代理。

方法二:使用--network=host共享宿主機(jī)網(wǎng)絡(luò)

創(chuàng)建容器時使用 --network=host

docker run --network=host -it image_name bash

在容器內(nèi)設(shè)置代理:

export ALL_PROXY="socks5://127.0.0.1:1080"
  • 注意--network=host 會使容器與宿主機(jī)共享網(wǎng)絡(luò),-p 端口映射參數(shù)將失效,所有端口直接暴露。

方法三:映射代理端口

創(chuàng)建容器時映射宿主機(jī)的代理端口:

docker run -p 1080:1080 -it image_name bash

在容器內(nèi)設(shè)置代理:

export ALL_PROXY="socks5://127.0.0.1:1080"
  • 適用于需要精確控制端口映射的場景。

方法四:通過全局代理配置(參考第 3 節(jié))

  • 使用 ~/.docker/config.json 配置全局代理,容器創(chuàng)建時會自動繼承代理環(huán)境變量。
  • 注意:全局代理與 --network=host 不建議同時使用,可能導(dǎo)致網(wǎng)絡(luò)配置沖突。

注意事項與常見問題

協(xié)議支持

  • Docker 目前僅支持 http、httpsftp 協(xié)議的代理,不支持 socks5。如需使用 socks5,可通過 polipo 轉(zhuǎn)換為 HTTP 代理(參考:https://neucrack.com/p/275)。
  • 未來 Docker 可能支持更多協(xié)議,建議參考官方文檔:https://docs.docker.com/network/proxy/。

IP 地址選擇

  • 默認(rèn) bridge 模式下,容器訪問宿主機(jī)代理需使用 docker0 網(wǎng)橋的 IP(如 172.17.0.1)。
  • 使用 --network=host 模式時,可直接使用 127.0.0.1。

代理配置的持久性

  • 全局代理配置(config.json)會影響所有新創(chuàng)建的容器,需謹(jǐn)慎管理。
  • 容器創(chuàng)建后,代理環(huán)境變量會被“固化”。若需更改,需在容器內(nèi)手動重新設(shè)置。

調(diào)試代理問題

  • 檢查 Docker Daemon 的環(huán)境變量:sudo systemctl show --property=Environment docker。
  • 驗證容器內(nèi)的代理設(shè)置:env | grep -i proxy。
  • 確保代理服務(wù)正常運(yùn)行,且端口未被防火墻攔截。

總結(jié)

  • 為什么不用 proxychainsproxychains 無法代理 Docker Daemon 的網(wǎng)絡(luò)請求,需通過 Docker 自身的機(jī)制設(shè)置代理。
  • 國內(nèi)鏡像加速:簡單有效,但穩(wěn)定性可能受限。

代理設(shè)置方案

  • docker pull/push:通過 systemd 配置 Docker Daemon 的代理。
  • docker build:通過 --build-arg--network=host 設(shè)置代理。
  • docker run:通過全局配置(config.json)或容器內(nèi)手動設(shè)置代理。

推薦做法

  • 優(yōu)先使用國內(nèi)鏡像加速器;若需代理,推薦全局配置(config.json)或手動設(shè)置環(huán)境變量,靈活性更高。

如需更多細(xì)節(jié),請參考 Docker 官方文檔:https://docs.docker.com/network/proxy/ 

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 使用docker的python基礎(chǔ)鏡像時要指定patch版本原理

    使用docker的python基礎(chǔ)鏡像時要指定patch版本原理

    這篇文章主要為大家介紹了使用docker的python基礎(chǔ)鏡像時要指定patch版本原理,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-10-10
  • 使用Docker快速部署ES單機(jī)方式

    使用Docker快速部署ES單機(jī)方式

    這篇文章主要介紹了使用Docker快速部署ES單機(jī)方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • docker將鏡像打包為.tar包實現(xiàn)方法

    docker將鏡像打包為.tar包實現(xiàn)方法

    使用tar包格式進(jìn)行壓縮,方便在不同的docker主機(jī)之間進(jìn)行遷移和備份,下面這篇文章主要給大家介紹了關(guān)于docker將鏡像打包為.tar包的實現(xiàn)方法,需要的朋友可以參考下
    2024-07-07
  • Mac安裝docker全過程(輕松解決安裝)

    Mac安裝docker全過程(輕松解決安裝)

    Docker是一種容器化技術(shù),通過鏡像、容器和倉庫三個基本概念實現(xiàn)應(yīng)用的封裝和自動化部署,它類似于集裝箱,能夠?qū)?yīng)用與環(huán)境封裝起來,簡化部署過程,在Mac上安裝Docker需要先安裝Homebrew,然后通過命令行安裝Docker
    2024-11-11
  • docker鏡像的導(dǎo)入和導(dǎo)出的實現(xiàn)

    docker鏡像的導(dǎo)入和導(dǎo)出的實現(xiàn)

    這篇文章主要介紹了docker鏡像的導(dǎo)入和導(dǎo)出的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • Docker數(shù)據(jù)卷掛載及宿主機(jī)目錄掛載使用和區(qū)別

    Docker數(shù)據(jù)卷掛載及宿主機(jī)目錄掛載使用和區(qū)別

    本文主要介紹了Docker數(shù)據(jù)卷掛載及宿主機(jī)目錄掛載使用和區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-02-02
  • 詳解Docker Compose 中可用的環(huán)境變量問題

    詳解Docker Compose 中可用的環(huán)境變量問題

    Compose 的多個部分在某種情況下處理環(huán)境變量。這篇文章主要介紹了Docker Compose 中可用的環(huán)境變量問題,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-12-12
  • 使用Maven打包構(gòu)建Docker鏡像并推送到倉庫

    使用Maven打包構(gòu)建Docker鏡像并推送到倉庫

    這篇文章主要介紹了使用Maven打包構(gòu)建Docker鏡像并推送到倉庫問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • Docker 徹底刪除私有庫鏡像的操作

    Docker 徹底刪除私有庫鏡像的操作

    這篇文章主要介紹了Docker 徹底刪除私有庫鏡像的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • centos7 安裝Jenkins詳細(xì)介紹

    centos7 安裝Jenkins詳細(xì)介紹

    這篇文章主要介紹了centos7 安裝Jenkins詳細(xì)介紹的相關(guān)資料,需要的朋友可以參考下
    2016-11-11

最新評論