社内プロキシ(認証有)な環境でdockerのイメージをビルドしたい

行いたい事

  • docker-composeを用いて、dockerfileのビルドをWindows10のPCで行いたい
  • WIndows10のDocker Desktop for Windowsでコンテナを起動させたい
  • 社内プロキシ(認証有)な環境で行いたい

事前設定・嵌った時の振り返りポイント

  • Docker Desktop for Windowsのプロキシ設定を確認しておく

 多分ビルドの時は直接アクセスするパターンが主ではあるが、コンテナ起動後の問題になるので

 http_proxyなど定義されているかどうか、それが想定通りなのかどうか

  • Windows10のプロキシ設定

WinHTTPプロキシの設定方法 - maruko2 Note.
・docker-composeを実行する環境のプロキシ設定
 上記を全て確認したのに、実行するコンソールの時だけ想定と狂っている事ないか

対応方法

ゲストOS, ゲストOS内pip用

docker-composeを実行する際に引数としてプロキシ情報を渡してあげる
大文字と小文字両方定義しておく方が無難

set USER=hoge
set PASS=hogehoge
set PROXY=http://%USER%:%PASS%@proxy.example.com:8888
docekr-compose build --build-arg HTTP_PROXY=%PROXY% --build-arg HTTPS_PROXY=%PROXY% --build-arg http_proxy=%PROXY% --build-arg https_proxy=%PROXY%
ゲストOS内npm用

dockerfileにプロキシを参照する記述を行う
docker-composeで渡された環境変数を利用できるので、それで設定する
registryのデフォルトがhttps~なので、http~にしないと動かない場合がある(串次第?)

RUN npm config set proxy $http_proxy
RUN npm config set https-proxy $https_proxy
RUN npm config set registry http://registry.npmjs.org/

その他

利用したいnpmパッケージによっては、上記を設定しても動かない場合があるかも

私の場合は、JupyterLabでJavaScriptを利用するためのijavascriptが導入できなかった。

Step 15/21 : RUN npm install -g ijavascript
 ---> Running in f3dd86b4f755
npm ERR! code 1
npm ERR! path /usr/lib/node_modules/ijavascript/node_modules/zeromq
npm ERR! command failed
npm ERR! command sh -c node scripts/prebuild-install.js || (node scripts/preinstall.js && node-gyp rebuild)
npm ERR!
npm ERR! Error: connect ECONNREFUSED 52.192.72.89:443
npm ERR!     at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1146:16) {
npm ERR!   errno: -111,
npm ERR!   code:

それ以外は無事導入できている事や、
他のパッケージで上記エラーをパッケージ側で直している事から多分自力では無理かも。
github.com
ただ自分のせいで無い事が証明できないのでissue登録できない…

ホスト名が解決できない場合は、docker-composeに定義すれば解決できる

qiita.com

ダブルクオーテーションなどの方言

プロキシの認証ユーザー名やパスワードのところにダブルクオーテーションが無いからエラーとか見かけた。
それを付ければ動くんだという回答と、それで動いた!ありがとう!というやりとりを見かけた。
よって、利用している社内プロキシによってはあり得るのかもしれない。
但し、私の環境では特にそんなことしなくても無事動いた。