Docker Desktop for WindowsでのProxy設定を理解する
学校でプロキシを経由する必要があったりなかったり、、、
なので自身の使うDocker Desktop for Windowsをプロキシ環境下で使う際の設定を調べてみました。
# 環境
- Windows10 Home Version 2004 OS Build 19041.630
- Docker v19.03.13 ( WSL 2 backend )
# ①imageのpush・pull時にプロキシを利用したい
docker push
やdocker pull
、Dockerfile内のFROM <image:tag>
がうまく行かない場合は、
setting->Resouces->PROXIES
からプロキシサーバーを指定してください。
# ②docker build時にプロキシを利用したい
docker build
で行うapt-get
やnpm install
等がうまく行かない場合は
# Docker 17.07以降
コンテナを起動するユーザーのホームディレクトリに.docker/config.json
を作成、または編集します。
{
"proxies":
{
"default":
{
"httpProxy": <proxy-setting>,
"httpsProxy": <proxy-setting>,
"noProxy": <no-proxy-setting>
}
}
}
2
3
4
5
6
7
8
9
10
11
この設定を記述しておくと、プロキシを利用できます。
# Docker 17.06以前
ビルド用に一時的に使う環境変数を手動で設定します。
dockerでは
docker build --build-arg HTTP_PROXY=<proxy-setting> --build-arg HTTPS_PROXY=<proxy-setting>
とすることでプロキシが利用できます。
通常--build-arg
で変数を指定する場合、事前にDockerfile
のARG
に定義しておく必要がありますが、
- HTTP_PROXY
- http_proxy
- HTTPS_PROXY
- https_proxy
- FTP_PROXY
- ftp_proxy
- NO_PROXY
- no_proxy
これらのプロキシ用環境変数はARG
で定義せずとも--build-arg
で使用できる事前定義変数です。
また、これらの変数はビルドの履歴を出力するdocker history
から除外されます。
※これらの変数をARGに再定義した場合、
docker history
で除外されないので注意が必要です。
docker-composeでは
dcoker-compose --build-arg HTTP_PROXY=<proxy-setting> --build-arg HTTPS_PROXY=<proxy-setting>
とします。
また、docker-compose.yml
のargs
に
build:
context: <Dockerfile-Path>
args:
- HTTP_PROXY=<proxy-seting>
- HTTPS_PROXY=<proxy-setting>
2
3
4
5
と書くこともできます。
# ③コンテナ内からプロキシを利用したい
コンテナ内から行うnpm install
等がうまく行かない場合は
# Docker 17.07以降
➁
と同様の設定を記述した上でコンテナを作成または開始すると、コンテナ内で利用できます。
# Docker 17.06以前
コンテナ内で扱う環境変数を手動で設定します。
Dockerfile
から設定する場合は
ENV HTTP_PROXY=<proxy-setting>
ENV HTTPS_PROXY=<proxy-setting>
.
..
2
3
4
docker-compose.yml
の場合は
environment:
- HTTP_PROXY=<proxy-setting>
- HTTPS_PROXY=<proxy-setting>
.
..
2
3
4
5
と記述していき、
docker CLIから指定したい場合は
dcoker run --env HTTP_PROXY=<proxy-setting>
docker-compose CLIから指定したい場合は
dcoker-compose run --env HTTP_PROXY=<proxy-setting>
と入力します。
※
config.json
に設定する場合とは違いENV
はコンテナ・イメージそのものに環境変数が展開されるため、ENV
で指定したコンテナ・イメージを共有するのには注意が必要です。 できる限りconfig.json
に設定するようにしましょう`
# ホストの環境変数が使える?
自分の環境で試したところ、ホストに$ENV:http_proxy...
が設定されている場合、➁
、➂
のケースでプロキシが利用できることが分かりました。
これに関しての記載が公式ドキュメントに見つからなかったため、詳細を知っている方がいればぜひ教えてほしいです。
↑ただの勘違いでした
# 参考リンク
Configure Docker to use a proxy server (opens new window)
Docker Desktop for Windows user manual (opens new window)
Dockerfile reference (opens new window)