プロキシ設定が必要なネットワークでDocker buildのエラーが出る

WSL2+Docker Desktop for Windowsでdocker buildが通らない

会社にプロキシがある場合 docker build で以下のようなエラーがでる場合がある。

docker: Error response from daemon: Get https://registry-1.docker.io/v2/: dial tcp: lookup registry-1.docker.io: no such host.

このエラーを解決するのにえらく時間がかかった。結論から言うとDocker Desktop側とWSL2側それぞれでプロキシの設定をしてあげる必要がある。

プロキシ設定は2つ必要

プロキシの設定は2つ行う必要がある。

  1. Docker Desktopでの設定
  2. docker buildコマンド実行時のオプションでの指定 or $HOME/.docker/config.json での設定

Docker Desktopでの設定

こちらはわかりやすい。画像にあるようにDocker Desktopで設定する。

resized-aZWNRtpAbWwcixTJ.jpg

docker buildコマンド実行時のオプションでの指定

Docker Desktop側の設定だけでは docker buildは通らない。 docker buildをプロキシを通して行うには docker buildのオプションでプロキシ設定をする必要がある。

docker build \
--build-arg HTTP_PROXY=http://USER:PASSWORD@HOST:PORT \
--build-arg HTTPS_PROXY=http://USER:PASSWORD@HOST:PORT \
--build-arg http_proxy=http://USER:PASSWORD@HOST:PORT \
--build-arg https_proxy=http://USER:PASSWORD@HOST:PORT \
-t test .

VSCodeの devcontainer.json で設定する

VSCodeのRemote-Containersを使っている場合 docker build コマンドはVSCodeから呼び出されるため devcontainer.jsonでオプション設定をする必要がある。

{
    "build": {
        "args": {
            "HTTP_PROXY": "http://USER:PASSWORD@HOST:PORT",
            "HTTPS_PROXY": "http://USER:PASSWORD@HOST:PORT",
            "http_proxy": "http://USER:PASSWORD@HOST:PORT",
            "https_proxy": "http://USER:PASSWORD@HOST:PORT"
        }
    }
}

ちなみにDockerfileにARGで指定することもできる。

$HOME/.docker/config.jsonで設定する

これを書いていてあらためて色々調べていて知ったのだが $HOME/.docker/config.json に指定してもいいらしい。

こちらはHTTP_PROXYといったKeyの書き方ではないようなので少し気をつける必要がある。

{
    "proxies":
    {
        "default":
        {
            "httpProxy": "http://USER:PASSWORD@HOST:PORT",
            "httpsProxy": "http://USER:PASSWORD@HOST:PORT"
        }
    }
}