Docker Desktop for WindowsでのProxy設定を理解する

12/4/2020 DockerDocker Desktop for WindowsWindows10Proxy環境構築

学校でプロキシを経由する必要があったりなかったり、、、
なので自身の使うDocker Desktop for Windowsをプロキシ環境下で使う際の設定を調べてみました。

# 環境

  • Windows10 Home Version 2004 OS Build 19041.630
  • Docker v19.03.13 ( WSL 2 backend )

# ①imageのpush・pull時にプロキシを利用したい

docker pushdocker pull、Dockerfile内のFROM <image:tag>がうまく行かない場合は、
setting->Resouces->PROXIESからプロキシサーバーを指定してください。
Setting

# ②docker build時にプロキシを利用したい

docker buildで行うapt-getnpm install等がうまく行かない場合は

# Docker 17.07以降

コンテナを起動するユーザーのホームディレクトリに.docker/config.jsonを作成、または編集します。

{
 "proxies":
 {
   "default":
   {
     "httpProxy": <proxy-setting>,
     "httpsProxy": <proxy-setting>,
     "noProxy": <no-proxy-setting>
   }
 }
}
1
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>
1

とすることでプロキシが利用できます。

通常--build-argで変数を指定する場合、事前にDockerfileARGに定義しておく必要がありますが、

  • 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>
1

とします。

また、docker-compose.ymlargs

build:
  context: <Dockerfile-Path>
  args:
    - HTTP_PROXY=<proxy-seting>
    - HTTPS_PROXY=<proxy-setting>
1
2
3
4
5

と書くこともできます。

# ③コンテナ内からプロキシを利用したい

コンテナ内から行うnpm install等がうまく行かない場合は

# Docker 17.07以降

と同様の設定を記述した上でコンテナを作成または開始すると、コンテナ内で利用できます。

# Docker 17.06以前

コンテナ内で扱う環境変数を手動で設定します。

Dockerfileから設定する場合は

ENV HTTP_PROXY=<proxy-setting>
ENV HTTPS_PROXY=<proxy-setting>
.
..
1
2
3
4

docker-compose.ymlの場合は

environment:
  - HTTP_PROXY=<proxy-setting>
  - HTTPS_PROXY=<proxy-setting>
.
..
1
2
3
4
5

と記述していき、

docker CLIから指定したい場合は

dcoker run --env HTTP_PROXY=<proxy-setting>
1

docker-compose CLIから指定したい場合は

dcoker-compose run --env HTTP_PROXY=<proxy-setting>
1

と入力します。

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)

Last Updated: 10/20/2021, 12:58:45 AM