讓容器透過代理伺服器(Proxy)存取網路
前言
之前在玩容器的時候,在讓容器透過代理伺服器(Proxy)上網這件事上面卡關卡了超級久。
在 Google 用 Docker Proxy 和 Container Proxy 這兩個關鍵字搜尋,也大多只能找到讓 Docker Daemon 透過代理伺服器連網的方法。
雖然大多數使用情境不會有這樣的需求,不過還是特別來記錄一下。
小提示
其實要替容器設定代理伺服器的思路和 Linux 一樣,都只要在環境變數中動手腳即可。
透過 ~/.docker/config.json 檔指定
如果想要針對所有容器設定共同的代理伺服器的話,可以透過建立並編輯 ~/.docker/config.json 檔來達成:
sudo nano ~/.docker/config.json
在裡面設定代理伺服器相關的資訊,例如:
~/.docker/config.json
{
"proxies":
{
"default":
{
"httpProxy": "http://13.59.91.109:80",
"httpsProxy": "https://13.59.91.109:80",
"noProxy": "127.0.0.0/8"
}
}
}
在存檔退出之後所建立的容器就都會套用這些設定。
透過 docker 指令指定
有時候我們可能會想針對特定的容器個別指定代理伺服器。
這邊以 Grafana 的容器為例,如果我們想要建立一個 Grafana 的容器,並且讓它透過我們指定的代理伺服器連網,可以透過下面幾種方式完成。
警告
容器在使用環境變數時有優先順序的差別,順序由高到低排列如下:
- 直接指定
- 作業系統的系統變數
- ~/.docker/config.json 中設定的值
- 環境變數檔 若有在 ~/.docker/config.json 中設定代理伺服器,則透過環境變數檔指定的代理伺服器將不會生效。
- 寫在 Docker file 裡
方法一:直接指定
docker run -e HTTP_PROXY="http://13.59.91.102:8080" \
--env HTTPS_PROXY="https://13.59.91.102:8080" \
-e NO_PROXY="ouch1978.github.io" \
ubuntu \
env | grep PROXY
執行結果如下:
