43
56

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Docker Desktop for Windows の proxy 設定

Last updated at Posted at 2019-12-19

これは何?

Docker for Windows の proxy 設定について説明します

Docker の proxy 設定は二カ所必要です。一つは docker daemon の設定。もう一つは docker container の設定です。両方とも設定が必要です。

docker daemon の設定

docker pulldocker build などを実行する daemon が参照する proxy の設定です。

公式の Get start with Docker for windows の proxy に記載しています。
具体的に記入例は、"Proxy環境下でDocker for Windowsを使う" がわかりやすいので、そちらをご覧ください。

docker container の設定

docker run で起動された、 docker container 上で走る OS が使う proxy の設定です。Dockerfile 中の RUN 文もこちらの設定を使います。
二通りのやり方があります。詳細は公式の Configure Docker to use a proxy server に記載がありますが、 linux 向けの記述しかありません。

また、昔の記事ではよく Dockerfile に ENV で記述する方法を紹介していますが、非推奨の方法なのでやめましょう。やめた方が良い理由は後述します。

config.json に追記し、 docker client の設定に proxy を加える

docker コマンドの実行環境が, cmd または powershellWSL2で設定先が変わります。

cmd または powershell 向けの設定

cmd または powershell の場合、config.json%USERPROFILE%\.docker\config.json を参照します。
デフォルトの状態だと下記のようになっていると思います。

%USERPROFILE%.docker\config.json
{
 "credsStore":"desktop",
 "stackOrchestrator":"swarm"
}

これに、下記のように proxy 設定を追記してください。

%USERPROFILE%.docker\config.json
{
 "credsStore":"desktop",
 "stackOrchestrator":"swarm",
 "proxies":
 {
   "default":
   {
     "httpProxy": "http://127.0.0.1:3001",
     "httpsProxy": "http://127.0.0.1:3001",
     "noProxy": "*.test.example.com,.example2.com"
   }
 }
}

WSL2 の場合

Linux と同様に ${HOME}/.docker/config.json を修正します。
デフォルトの状態だと下記のようになっていると思います。

${HOME}/.docker/config.json
{
  "credsStore": "desktop.exe"
}

これに、下記のように proxy 設定を追記してください。

${HOME}/.docker/config.json
{
 "credsStore": "desktop.exe",
 "proxies":
 {
   "default":
   {
     "httpProxy": "http://127.0.0.1:3001",
     "httpsProxy": "http://127.0.0.1:3001",
     "noProxy": "*.test.example.com,.example2.com"
   }
 }
}

docker container 起動時に引数で与える

docker run --env HTTP_PROXY="http://127.0.0.1:3001" のように、--env で指定します。

Dockerfile に ENV で記述するのはやめましょう

個人的に使用し、他の人と docker image を共有するのであれば、 ENV で指定するのは即座にやめましょう。

移植性がない

余所の環境で利用する場合、そのままの Dockerfile では動きません。ENV の行を書き換える必要があります。もしくは、ENV に与える値を ARG 経由にするとか、 Dockerfile 側に独自の引数を追加することになります。
そのままの image を起動する場合、[上記の設定](#docker container の設定) が必要になります。 ENV に埋めるだけ無駄です。

安全性が低い

docker inspect で docker image の情報を確認すると、 ENV の値が全て見えます。
例えば、下記の Dockerfile で作成したものを inspect した例を示します。

Dockerfile
FROM gliderlabs/alpine
ENV http_proxy hogehoge.jp:8080

inspect で見える、該当箇所だけ抜粋します。

            "Env": [
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
                "http_proxy=hogehoge.jp:8080"
            ],

のような感じで、 ENV に指定した値が丸見えです。ユーザ認証を必要とする proxy だったりすると、ID や pass が漏れます。
docker build --build-arg http_proxy=... で認証プロキシを設定すると危険だよ、という話 が詳しいです。

参考にしたところ

Get started with Docker for Windows
Proxy環境下でDocker for Windowsを使う
Configure Docker to use a proxy server
docker build --build-arg http_proxy=... で認証プロキシを設定すると危険だよ、という話

43
56
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
43
56

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?