Help us understand the problem. What is going on with this article?

Docker Desktop for Windows の proxy 設定

これは何?

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 の設定です。
二通りのやり方があります。詳細は公式の Configure Docker to use a proxy server に記載がありますが、 linux 向けの記述しかありません。

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

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

Windows の場合、 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"
   }
 }
}

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 を起動する場合、上記の設定 が必要になります。 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=... で認証プロキシを設定すると危険だよ、という話

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした