最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(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 通過代理拉取鏡像時(shí),常常發(fā)現(xiàn)代理并未生效,拉取速度依然很慢。其根本原因在于 Docker 的架構(gòu)和 proxychains 的工作機(jī)制不兼容。

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

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

  • Docker 客戶端通過命令行工具(如 docker pull)與 Docker Daemon 通信,后者負(fù)責(zé)實(shí)際的鏡像拉取、推送等操作。
  • Docker Daemon 是一個(gè)獨(dú)立的守護(hù)進(jìn)程,通常由 systemd 管理,運(yùn)行在宿主機(jī)上,而不是直接在用戶終端環(huán)境中運(yùn)行。
  • proxychains 是一個(gè)基于動(dòng)態(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 時(shí),proxychains 僅代理了 docker 客戶端命令的網(wǎng)絡(luò)請求,而 Docker Daemon 的實(shí)際網(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)行時(shí)的代理環(huán)境變量。
  • 如果需要使用 socks5 代理(如 proxychains 常用的代理類型),需將 socks5 轉(zhuǎn)換為 http 代理(如通過 polipo),因?yàn)?Docker 目前僅支持 http、httpsftp 協(xié)議的代理。

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

在國內(nèi)訪問 Docker Hub 速度較慢時(shí),可以通過配置鏡像加速器來提升 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

注意事項(xiàng)

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

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

以下是針對 docker pulldocker 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ù)實(shí)際代理服務(wù)配置。
  • 如果使用 socks5 代理,需通過工具(如 polipo)將其轉(zhuǎn)換為 HTTP 代理。

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

sudo systemctl daemon-reload
sudo systemctl restart docker

驗(yàn)證環(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)建鏡像時(shí)通過 --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)建時(shí)指定 --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ì)自動(dòng)繼承這些環(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 會(huì)自動(dòng)應(yīng)用代理設(shè)置到新創(chuàng)建的容器,無需重啟服務(wù)。
  • 新創(chuàng)建的容器會(huì)繼承 http_proxy、https_proxyno_proxy 環(huán)境變量。

注意

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

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

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

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

方法一:在容器內(nèi)手動(dòng)設(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)建容器時(shí)使用 --network=host

docker run --network=host -it image_name bash

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

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

方法三:映射代理端口

創(chuàng)建容器時(shí)映射宿主機(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)建時(shí)會(huì)自動(dòng)繼承代理環(huán)境變量。
  • 注意:全局代理與 --network=host 不建議同時(shí)使用,可能導(dǎo)致網(wǎng)絡(luò)配置沖突。

注意事項(xiàng)與常見問題

協(xié)議支持

  • Docker 目前僅支持 httphttpsftp 協(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 模式時(shí),可直接使用 127.0.0.1。

代理配置的持久性

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

調(diào)試代理問題

  • 檢查 Docker Daemon 的環(huán)境變量:sudo systemctl show --property=Environment docker。
  • 驗(yàn)證容器內(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)手動(dòng)設(shè)置代理。

推薦做法

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

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

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

相關(guān)文章

  • docker里面不能使用vim的問題及解決

    docker里面不能使用vim的問題及解決

    這篇文章主要介紹了docker里面不能使用vim的問題及解決方案,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • docker-compose部署coredns如何實(shí)現(xiàn)自建DNS服務(wù)

    docker-compose部署coredns如何實(shí)現(xiàn)自建DNS服務(wù)

    本文介紹了如何在內(nèi)網(wǎng)中使用自建的CoreDNS服務(wù)進(jìn)行域名解析,通過配置Corefile和hosts文件,實(shí)現(xiàn)內(nèi)部域名解析,無需在互聯(lián)網(wǎng)上注冊域名,使用docker-compose運(yùn)行CoreDNS,并通過修改resolv.conf文件配置DNS服務(wù)
    2025-01-01
  • 詳解使用阿里云鏡像倉庫構(gòu)建國外Docker鏡像

    詳解使用阿里云鏡像倉庫構(gòu)建國外Docker鏡像

    這篇文章主要介紹了詳解使用阿里云鏡像倉庫構(gòu)建國外Docker鏡像,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • Docker安裝ElasticSearch和Kibana的問題及處理方法

    Docker安裝ElasticSearch和Kibana的問題及處理方法

    這篇文章主要介紹了Docker安裝ElasticSearch和Kibana的問題及遇到問題解決方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-02-02
  • 查看docker中運(yùn)行的JVM參數(shù)問題及解決方法

    查看docker中運(yùn)行的JVM參數(shù)問題及解決方法

    這篇文章主要介紹了查看docker中運(yùn)行的JVM參數(shù),方法一使用的是jcmd命令,方法二是jinfo命令,本文給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧
    2022-04-04
  • docker?安裝?zeppeline的操作

    docker?安裝?zeppeline的操作

    Zeppelin是基于Jupyter Notebook技術(shù)開發(fā)的大數(shù)據(jù)交互分析服務(wù)軟件。接下來通過本文給大家介紹docker?安裝?zeppeline的相關(guān)知識(shí),感興趣的朋友一起看看吧
    2022-01-01
  • docker-compose基于MySQL8部署項(xiàng)目的實(shí)現(xiàn)

    docker-compose基于MySQL8部署項(xiàng)目的實(shí)現(xiàn)

    這篇文章主要介紹了docker-compose基于MySQL8部署項(xiàng)目的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • dubbo服務(wù)引用創(chuàng)建Invoker代理對象

    dubbo服務(wù)引用創(chuàng)建Invoker代理對象

    這篇文章主要為大家介紹了dubbo服務(wù)引用創(chuàng)建Invoker代理對象示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-08-08
  • Docker Swarm結(jié)合Docker Compose部署集群的實(shí)現(xiàn)

    Docker Swarm結(jié)合Docker Compose部署集群的實(shí)現(xiàn)

    本文主要介紹了Docker Swarm結(jié)合Docker Compose部署集群的實(shí)現(xiàn),通過部署和配置幫助讀者更好地理解并應(yīng)用這些工具,感興趣的可以了解一下
    2023-12-12
  • 詳解docker中Dockerfile指令創(chuàng)建鏡像

    詳解docker中Dockerfile指令創(chuàng)建鏡像

    這篇文章主要介紹了詳解docker中Dockerfile指令創(chuàng)建鏡像,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-11-11

最新評論

颍上县| 视频| 乡宁县| 翼城县| 青海省| 普定县| 平南县| 石门县| 张家界市| 西乌珠穆沁旗| 津市市| 宁武县| 沈丘县| 鲁甸县| 长阳| 上林县| 吐鲁番市| 永吉县| 东阿县| 桑植县| 文昌市| 阿拉善左旗| 八宿县| 白沙| 霞浦县| 星子县| 金平| 莆田市| 洛扎县| 麻江县| 丘北县| 徐闻县| 德保县| 仙游县| 扎兰屯市| 锦州市| 定兴县| 大理市| 南阳市| 如皋市| 呼图壁县|