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)