これは何?
docker buildx を proxy 環境化で行う方法です。
2021/8/5現在、Docker Desktop for Windows の proxy 設定 に記載した設定は, buildx に引き継がれません。たぶん。
結論
proxy が http://hogehoge.com:8080
の環境で、 カレントディレクトリの Dockerfile
を使って piyo
ビルドすると以下のようになります。
docker buildx create --use --driver-opt env.http_proxy=http://hogehoge.com:8080 --driver-opt env.http_proxy=http://hogehoge.com:8080
docker buildx build --build-arg http_proxy=http://hogehoge.com:8080 --build-arg https_proxy=http://hogehoge.com:8080 -t piyo .
Windows の Docker version 20.10.7 で, --platform linux/arm64
向けビルドで動作確認しました.
ビルドは、この記事の設定でできますが、 private registry への push はできません。。。
Buildx don't push image on private registry
詳細
buildx は, moby が配布する builder image を使って docker image をビルドします. この builder image は proxy 設定がなされておらず、また host の proxy が反映されません。そのため、docker buildx build
を実行すると image の pull で proxy が使われません。
buildx new builder do not use proxy settings of default docker daemon での議論をみると、 --driver-opt
で builder の環境変数を設定できるので、これを使います。
また、Dockerfile
に記載している RUN コマンドは、ビルド対象の docker image コンテナの環境のうえ、HOST の設定が引き継がれないので、 builder image の設定は反映されません。ですので、 buildx build で --build-arg
を使って proxy 設定をします。
雑感
builder image 独自にあつらえれば、build の引数無しでいけると思います。 private registry への push も、認証情報を独自 builder image に入れ込めば大丈夫と思います。
具体的には、builder image の /root/.docker/config.json
に proxy を入れれば良いと思います。 認証情報も入れられれば、 private registry に push できる気もします。