快速設(shè)置Docker的三種網(wǎng)絡(luò)代理配置方式
通過代理訪問網(wǎng)絡(luò)是一個(gè)比較頭疼的事情,例如:想訪問遠(yuǎn)程的 Docker Daemon 需要代理,想拉取或推送國(guó)外的鏡像需要代理,想容器內(nèi)部訪問國(guó)外的資源又需要代理。
上面的場(chǎng)景是不是讓你很頭大,但是請(qǐng)想開點(diǎn),這篇文章將讓你通往自由的國(guó)度。保護(hù)你的頭發(fā),讓你留出更多的時(shí)間去做該做的事情。
上面說的是三個(gè)場(chǎng)景就是針對(duì)于不同的網(wǎng)絡(luò)代理需要,根據(jù)需要處理即可。
Docker Client - 代理訪問遠(yuǎn)程的 Docker Daemon
參考 Docker 官方文檔:Use the Docker command line
Docker 的 Client 和 Daemon 端是可以不在同一個(gè)機(jī)器上的,可以通過 docker -h 連接其他的 Docker Daemon。

在 Client 端設(shè)置代理其實(shí)就是設(shè)置 Linux 系統(tǒng)的代理,從而讓系統(tǒng)的命令行可以通過代理連接到外部的網(wǎng)絡(luò)。
一般只需要配置 HTTP_PROXY 與 HTTPS_PROXY 這兩個(gè)即可。
- 臨時(shí)生效: 在命令行中執(zhí)行下面的命令,根據(jù)自己實(shí)際代理
IP與代理端口設(shè)置(需要允許局域網(wǎng)連接):
export https_proxy=http://127.0.0.1:7890 http_proxy=http://127.0.0.1:7890
- 永久生效,在系統(tǒng)變量中配置。系統(tǒng)變量配置有多個(gè)地方,例如在
/etc/profile文件的底部添加下面的內(nèi)容:
export https_proxy=http://127.0.0.1:7890 export http_proxy=http://127.0.0.1:7890
讓配置文件生效:
source /etc/profile
恭喜,Docker Client 代理配置完成!
Docker Daemon - 代理拉取或推送國(guó)外鏡像
參考 Docker 官方文檔:Control Docker with systemd
有的時(shí)候我們會(huì)用到一些國(guó)外的鏡像,比如搭建 k8s 時(shí)會(huì)用到 k8s.gcr.io 提供的鏡像,但是無法正常 pull;或者你想將某些鏡像上傳到國(guó)外的鏡像倉(cāng)庫(kù)中,都需要使用代理進(jìn)行操作。

注:
- Docker 守護(hù)程序(
dockerd)是在其啟動(dòng)環(huán)境中使用HTTP_PROXY、HTTPS_PROXY和NO_PROXY環(huán)境變量來配置HTTP或HTTPS代理行為,需要在Docker systemd服務(wù)文件中添加此配置。 - 在
daemon.json文件或者是在系統(tǒng)環(huán)境變量文件中配置它們都不會(huì)使其生效。
要實(shí)現(xiàn) Daemon 代理會(huì)比較復(fù)雜一些,并且下面的操作將覆蓋默認(rèn)的 docker.service 文件,這樣當(dāng) Docker 啟動(dòng)的時(shí)候就會(huì)讀取到下面的代理配置信息:
1.在 /etc/systemd/system 目錄下創(chuàng)建 docker.service.d 目錄
sudo mkdir -p /etc/systemd/system/docker.service.d
2.在該目錄下創(chuàng)建 http-proxy.conf 文件
sudo touch /etc/systemd/system/docker.service.d/http-proxy.conf
3.選用你最喜歡的編輯器,編輯該文件并添加下面的內(nèi)容,這里使用 vi/vim 進(jìn)行編輯。
vim /etc/systemd/system/docker.service.d/http-proxy.conf
根據(jù)自身需要添加下面的內(nèi)容并替換為實(shí)際的配置,一般只需要添加 HTTP_PROXY 和 HTTPS_PROXY:
[Service] Environment="HTTP_PROXY=http://proxy.example.com:8080/" Environment="HTTPS_PROXY=http://proxy.example.com:8080/" Environment="NO_PROXY=localhost,127.0.0.1,.example.com"
【注】HTTP_PROXY 用于代理訪問 http 請(qǐng)求,HTTPS_PROXY 用于代理訪問 https 請(qǐng)求,如果想某個(gè) IP或域名不走代理則配置到 NO_PROXY中。
添加完成后,保存即可。
4.刷新更改并重新啟動(dòng) Docker
sudo systemctl daemon-reload sudo systemctl restart docker
恭喜,Docker Daemon 代理配置完成!
Container - 容器內(nèi)部代理訪問國(guó)外資源
參考 Docker 官方文檔: Configure Docker to use a proxy server
該代理只針對(duì)于后續(xù) build 或 run 的容器有效,已經(jīng)創(chuàng)建好的不受影響。
主要是用于容器內(nèi)部的網(wǎng)絡(luò)訪問。

本身容器就可以當(dāng)做一個(gè)簡(jiǎn)化版的 Linux 系統(tǒng),如果想實(shí)現(xiàn)容器內(nèi)部的代理,則必須在容器內(nèi)設(shè)置適當(dāng)?shù)沫h(huán)境變量。
直接在容器內(nèi)部進(jìn)行修改,雖然也可以這樣做,但是不是很推薦,如果不是測(cè)試使用,最好還是保證容器的完整性。
如果是想要將該容器導(dǎo)出并移植到其他機(jī)器上去的話,那肯定是在容器內(nèi)部修改環(huán)境變量導(dǎo)出。
- 在
Docker 17.06 及更早版本中,可以在構(gòu)建映像(這會(huì)降低映像的可移植性)或創(chuàng)建或運(yùn)行容器時(shí)通過指定參數(shù)來執(zhí)行此操作。 - 在
Docker 17.07 及更高版本中,Docker提供了一個(gè)全局的配置,可以通過配置Docker客戶端以自動(dòng)將代理信息傳遞給容器,從而讓所有的容器內(nèi)部都支持代理訪問。
通過參數(shù)配置在這里就不多說了,無非就是命令的使用。這里主要說一下 Docker 17.07 及更高版本中的全局配置:
1.在 Docker 客戶端上,在啟動(dòng)容器的用戶的主目錄中創(chuàng)建或編輯文件 ~/.docker/config.json。 如果沒有該目錄或文件則使用相應(yīng)的用戶來創(chuàng)建。
# 創(chuàng)建目錄 mkdir ~/.docker # 創(chuàng)建配置文件 touch ~/.docker/config.json # 編輯配置文件 vim ~/.docker/config.json
根據(jù)自身需要添加下面的內(nèi)容并替換為實(shí)際的配置,一般只需要添加 HTTP_PROXY 和 HTTPS_PROXY 即可:
{
"proxies":
{
"default":
{
"httpProxy": "http://127.0.0.1:7890",
"httpsProxy": "http://127.0.0.1:7890",
"noProxy": "*.test.example.com,.example2.com,127.0.0.0/8"
}
}
}【注】HTTP_PROXY 用于代理訪問 http 請(qǐng)求,HTTPS_PROXY 用于代理訪問 https 請(qǐng)求,如果想某個(gè) IP或域名不走代理則配置到 NO_PROXY中。
添加完成后,保存即可。
2.重新啟動(dòng) Docker
sudo systemctl restart docker
恭喜,Container 代理配置完成!
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
docker部署xxl-job-admin出現(xiàn)數(shù)據(jù)庫(kù)拒絕問題及解決方法
這篇文章主要介紹了docker部署xxl-job-admin出現(xiàn)數(shù)據(jù)庫(kù)拒絕問題,本文給大家分享正確的解決思路,對(duì)docker部署xxl-job-admin相關(guān)知識(shí)感興趣的朋友一起看看吧2023-02-02
docker安裝Jenkins執(zhí)行構(gòu)建jar運(yùn)行方式
這篇文章主要介紹了docker安裝Jenkins執(zhí)行構(gòu)建jar運(yùn)行方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-05-05
docker 創(chuàng)建RedHat8.5鏡像的命令
這篇文章主要介紹了docker 創(chuàng)建RedHat8.5鏡像的命令,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2024-03-03
查看docker是否處于啟動(dòng)狀態(tài)的方法詳解
Docker 是一個(gè)開源的應(yīng)用容器引擎,讓開發(fā)者可以打包他們的應(yīng)用以及依賴包到一個(gè)可移植的容器中,本文主要給大家介紹了查看docker是否處于啟動(dòng)狀態(tài)的方法,需要的朋友可以參考下2024-06-06
Docker配置國(guó)內(nèi)加速器加速鏡像下載的方法
本篇文章主要介紹了Docker配置國(guó)內(nèi)加速器加速鏡像下載的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-07-07
Docker格式化輸出命令:"docker?inspect?--format"?學(xué)習(xí)記錄
Docker?--format?參數(shù)提供了基于?Go模板?的日志格式化輸出輔助功能,并提供了一些內(nèi)置的增強(qiáng)函數(shù),這篇文章主要介紹了Docker格式化輸出命令:"docker?inspect?--format"?學(xué)習(xí)筆記,需要的朋友可以參考下2023-01-01
Docker構(gòu)建文件Dockerfile簡(jiǎn)單入門
這篇文章主要介紹了Docker構(gòu)建文件Dockerfile簡(jiǎn)單入門,需要的朋友可以參考下2022-04-04

