之前已經講過如何設置Docker守護進程如何設置網絡代理,那麼如何設置運行的Docker容器的網絡代理呢?
設置環境變量
設置容器環境變量,這也是最直接的一種方式。啓動容器時,通過設置–env的flag,將環境變量傳入容器。
變量名 | Dockerfile示例 | Docker run示例 |
---|---|---|
HTTP_PROXY | ENV HTTP_PROXY “http://127.0.0.1:3001” | –env HTTP_PROXY=“http://127.0.0.1:3001” |
HTTPS_PROXY | ENV HTTPS_PROXY “https://127.0.0.1:3001” | –env HTTPS_PROXY=“https://127.0.0.1:3001” |
FTP_PROXY | ENV FTP_PROXY “ftp://127.0.0.1:3001” | –env FTP_PROXY=“ftp://127.0.0.1:3001” |
NO_PROXY | ENV NO_PROXY “*.test.example.com,.example2.com” | –env NO_PROXY="*.test.example.com,.example2.com" |
這種方式的優點就是直接,但缺點就是每次啓動容器,都需要顯示的設置,那麼編譯一些項目就會遇到麻煩。比如kubevirt項目,會在代碼中啓動容器下載go項目,需要用到代理,那就必須手動找到啓動容器的位置,顯示加上以上的環境變量,增加了很多工作量。爲了解決這種情況,在Docker 17.07以上,可以使用配置Docker客戶端的方式。
配置Docker客戶端
前置條件:Docker 17.07以上。
在啓動docker用戶的Home目錄,創建~/.docker/config.json
文件,增加http_proxy、https_proxy、ftp_proxy等的設置。當然,也可以同時配置多個代理服務器。
對於不想使用no_proxy的路徑,也可以增加no_proxy的配置,no_proxy的內容用逗號分隔,而且支持通配符*。
示例:
{
"proxies":
{
"default":
{
"httpProxy": "http://127.0.0.1:3001",
"httpsProxy": "http://127.0.0.1:3001",
"noProxy": "*.test.example.com,.example2.com"
}
}
}
啓動容器,即可看到容器內會被自動加入代理。