如何讓我的所有 docker 容器使用我的代理程式?

如何讓我的所有 docker 容器使用我的代理程式?

我在 Debian Jessie 上運行 docker,它位於公司代理後面。為了能夠下載 docker 映像,我需要將以下內容新增到我的/etc/defaults/docker

http_proxy="http://localhost:3128/"

我可以確認這有效。

但是,為了能夠從容器內存取 interwebz,我需要啟動所有會話,--net host然後設定這些環境變數:

export http_proxy=http://localhost:3128/
export https_proxy=https://localhost:3128/
export ftp_proxy=${http_proxy}

理想情況下,我希望容器不需要主機網絡,也不了解代理(即容器中對連接埠 20、80、443 的所有出站呼叫都透過主機的代理埠進行)。那可能嗎?

如果做不到這一點,是否可以進行站點設置,以確保這些環境變數在本地設置但永遠不會作為圖像的一部分導出?

更新:我知道我可以用 etc 傳遞這些東西--env http_proxy=...,但這很笨重。我希望它適用於系統上的所有用戶,而無需使用別名。

答案1

看到這個答案:

主機伺服器運行一個容器,該容器運行可以執行透明代理的代理(在本例中為魷魚)。該容器有一些 iptables 規則,將 NAT 流量傳輸到代理伺服器 - 這意味著容器需要在特權模式下運行。

主機伺服器還包含(這就是神奇的)ip 路由表條目,這些條目透過代理容器重新路由來自除代理之外的任何容器的所有流量,該代理的目的地是連接埠 80。

最後一點本質上意味著,對於連接埠 80 流量,從容器到世界其他地方的路由會經過代理容器 - 使其有機會進行 NAT 和透明代理。

https://github.com/silarsis/docker-proxy

答案2

配置 Docker 客戶端官方文件展示瞭如何輕鬆解決這個問題。

編輯~/.docker/config.json(或%USERPROFILE%\.docker\config.json) 檔案並新增以下 JSON 片段:

{
    "proxies": {
        "default": {
            "httpProxy": "http://localhost:3128",
            "httpsProxy": "https://localhost:3128"
        }
    }
}

apt udpate這解決了我在 debian docker 容器內運行會失敗的問題。在該 json 檔案中新增代理設定並啟動新的 docker 容器後,它apt update開始運作。

相關內容