在我的家中,為了確保網(wǎng)絡(luò)安全,所有的應(yīng)用默認(rèn)都只能訪問家庭內(nèi)網(wǎng),無法直接連接外網(wǎng)。同時為了讓家中設(shè)備能夠順暢地訪問外部網(wǎng)絡(luò)資源,我在局域網(wǎng)中配置了一臺代理服務(wù)器,通過 192.168.1.140:7890 這個地址可以實(shí)現(xiàn)外網(wǎng)訪問。因此,在使用 Docker 進(jìn)行容器化應(yīng)用的開發(fā)時,配置網(wǎng)絡(luò)代理是必不可少的一步,尤其是在拉取鏡像或運(yùn)行需要聯(lián)網(wǎng)的應(yīng)用時。

解鎖網(wǎng)絡(luò)限制:Docker 代理配置攻略

本文將介紹如何在不創(chuàng)建復(fù)雜網(wǎng)絡(luò)橋接的前提下,利用已有的 HTTP 和 SOCKS 代理為 Docker 配置網(wǎng)絡(luò),使得在這種受限網(wǎng)絡(luò)環(huán)境下依然能夠高效進(jìn)行開發(fā)。

適用場景

  • 拉取鏡像時需要代理:某些公共鏡像倉庫在部分地區(qū)訪問緩慢,或因遭受網(wǎng)絡(luò)攻擊而難以直接連接,通過代理可以解決這些問題。
  • 容器中訪問外部網(wǎng)絡(luò)資源:當(dāng)在容器中運(yùn)行的應(yīng)用需要訪問外部 API、下載數(shù)據(jù)或進(jìn)行其他網(wǎng)絡(luò)操作時,配置代理能夠保證這些操作的順暢進(jìn)行。
  • 已有 HTTP 和 SOCKS 代理:如果你已經(jīng)在局域網(wǎng)或本地環(huán)境中配置了代理服務(wù)器,那么可以直接利用這些資源,而無需再進(jìn)行復(fù)雜的 Docker 網(wǎng)絡(luò)配置,如自定義網(wǎng)橋或額外的網(wǎng)絡(luò)插件。

解鎖網(wǎng)絡(luò)限制:Docker 代理配置攻略

一:配置 Docker 的全局代理

對于希望所有 Docker 操作都通過代理進(jìn)行的場景,最簡單的方式是修改 Docker 的配置文件 daemon.json。此方法適用于需要全局代理的開發(fā)環(huán)境,比如經(jīng)常拉取公共鏡像的情況。

解鎖網(wǎng)絡(luò)限制:Docker 代理配置攻略

  1. 打開 Docker 配置文件:

    sudo nano /etc/docker/daemon.json

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

    { "proxies": { "httpProxy": "http://192.168.1.140:7890", "httpsProxy": "http://192.168.1.140:7890", "noProxy": "localhost,127.0.0.1" } }

    在這段配置中:

    • httpProxyhttpsProxy 分別指定了 HTTP 和 HTTPS 的代理地址,開發(fā)者可以根據(jù)自己的代理服務(wù)器進(jìn)行替換。
    • noProxy 則用于指定哪些地址無需走代理,例如本地地址 localhost127.0.0.1,防止代理配置影響到本地開發(fā)。

    配置完成后,保存并退出編輯器,然后重新加載和重啟 Docker 服務(wù)以使配置生效:

  3. 保存文件后,重啟 Docker 服務(wù):

    sudo systemctl daemon-reload sudo systemctl restart docker

這樣,所有的 Docker 拉取和網(wǎng)絡(luò)訪問請求都會通過你設(shè)置的代理進(jìn)行。

解鎖網(wǎng)絡(luò)限制:Docker 代理配置攻略

二:在運(yùn)行容器時設(shè)置代理

在某些場景下,你可能并不希望為所有 Docker 操作都配置代理,而只希望特定的容器使用代理。例如,在開發(fā)或測試環(huán)境中,某些應(yīng)用需要訪問外部網(wǎng)絡(luò)資源,而本地網(wǎng)盤等應(yīng)用則不需要。在這種情況下,你可以在啟動容器時通過環(huán)境變量來設(shè)置代理,從而實(shí)現(xiàn)針對性配置,而無需修改全局 Docker 設(shè)置。

假如你有一個需要通過代理訪問外部網(wǎng)絡(luò)的容器,可以在啟動容器時通過 docker run 命令指定 HTTP 和 HTTPS 代理:

docker run -e HTTP_PROXY="http://192.168.1.140:7890" -e HTTPS_PROXY="http://192.168.1.140:7890" your_image_name

這會為該容器配置網(wǎng)絡(luò)代理,其他容器不會受到影響。

三:在 Docker Compose 中配置代理

對于使用 Docker Compose 管理多容器應(yīng)用的開發(fā)者來說,通過 docker-compose.yml 文件配置代理是更加高效和簡潔的方法。當(dāng)你的應(yīng)用由多個服務(wù)組成,并且這些服務(wù)都需要統(tǒng)一的代理配置時,這種方式可以大大簡化操作。

假設(shè)你有一個多服務(wù)應(yīng)用,并希望為其中的服務(wù)統(tǒng)一配置代理,你可以在 docker-compose.yml 文件中添加如下內(nèi)容:

version: '3' services: App: image: your_image_name environment: - HTTP_PROXY=http://192.168.1.140:7890 - HTTPS_PROXY=http://192.168.1.140:7890

在這里,environment 字段用于指定環(huán)境變量:

  • 你可以為每個服務(wù)分別配置代理,這樣在啟動容器時,這些服務(wù)就會自動應(yīng)用代理設(shè)置。
  • 這種方法在微服務(wù)架構(gòu)中尤為有效,特別是當(dāng)多個服務(wù)需要一致的網(wǎng)絡(luò)訪問策略時,通過 docker-compose.yml 文件集中管理可以減少重復(fù)配置的麻煩。

此外,如果你的 docker-compose.yml 文件中包含多個服務(wù),你可以為每個服務(wù)單獨(dú)配置代理,或者僅為需要的服務(wù)配置代理。例如:

version: '3' services: app1: image: image1 environment: - HTTP_PROXY=http://192.168.1.140:7890 - HTTPS_PROXY=http://192.168.1.140:7890 app2: image: image2 environment: # app2 沒有配置代理

此時,只有 app1 服務(wù)會通過代理訪問網(wǎng)絡(luò),而 app2 服務(wù)則不受代理影響。這種靈活性使得 Docker Compose 成為管理多容器應(yīng)用的得力工具。

解鎖網(wǎng)絡(luò)限制:Docker 代理配置攻略
解鎖網(wǎng)絡(luò)限制:Docker 代理配置攻略
解鎖網(wǎng)絡(luò)限制:Docker 代理配置攻略

作者聲明本文無利益相關(guān),歡迎值友理性交流,和諧討論~

,

聲明:本站所有文章,如無特殊說明或標(biāo)注,均為本站原創(chuàng)發(fā)布。任何個人或組織,在未征得本站同意時,禁止復(fù)制、盜用、采集、發(fā)布本站內(nèi)容到任何網(wǎng)站、書籍等各類媒體平臺。如若本站內(nèi)容侵犯了原著者的合法權(quán)益,可聯(lián)系我們進(jìn)行處理。