会社にプロキシがある場合 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つ行う必要がある。
$HOME/.docker/config.json
での設定こちらはわかりやすい。画像にあるようにDocker Desktopで設定する。
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の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
に指定してもいいらしい。
こちらはHTTP_PROXYといったKeyの書き方ではないようなので少し気をつける必要がある。
{
"proxies":
{
"default":
{
"httpProxy": "http://USER:PASSWORD@HOST:PORT",
"httpsProxy": "http://USER:PASSWORD@HOST:PORT"
}
}
}