proxy環境下でWindows版Dockerでapk updateが失敗する件


現象:alpineでapk updateすると失敗する

proxy環境下では、環境変数でhttp_proxy等を設定する必要がありますが、
なぜかapk updateが失敗する時があり、alpineだけは駄目だったみたいな記事にぶち当たります。
しかもその解決方法がちゃんと書いて無いので困りました。

環境

Windows10
Docker Desktop for Windows Version 2.2.0.3(42716)です。

結論と解決策

Docker Desktopの設定項目でproxyを設定してある場合
Dockerの環境変数にproxyを設定すると何故かproxyが参照できなくなる。
当時のバージョンのバグかもしれませんが、同じネタにハマったら参考にしてください。

http_proxyを再設定(unsetしてからexport)するとうまくいく
という報告を見つけてRUNコマンドの先頭でunsetを試すと確かに動作しました。

適宜proxyの設定を除外すると繋がるようになります。
今回のケースではWindows Desktopの
Settings>Resources>PROXYIESの設定のみ実施すれば大丈夫でした。

調査内容

以下に調査した内容を記述します。
同じようなことに困った場合に参考にしてください。

失敗ケース:設定ファイル

HTTP_PROXYとhttp_proxy両方設定しているのは、
コマンドによって大文字小文字どちらかを参照するケースがあり、
ワークアラウンドとして両方設定を推奨する事前情報を参考にしたものです。
envとargs両方に設定してあるのは片方が駄目だったので足してる途中だからです。

docker-compose.yml
version: '3.5'
services:
  alp:
    build: 
      context: .
      args: 
        HTTP_PROXY: ${HTTP_PROXY}
        http_proxy: ${http_proxy}
        HTTPS_PROXY: ${HTTPS_PROXY}
        https_proxy: ${https_proxy}
    tty: true
    stdin_open: true
    working_dir: /app
    env_file: .env
Dockerfile
FROM python:3.7-alpine

RUN apk update \
 && apk add --no-cache nodejs npm git
.env
#proxy
http_proxy="http://proxy-host:proxy-port/"
https_proxy="https://proxy-host:proxy-port/"
HTTP_proxy="http://proxy-host:proxy-port/"
HTTPS_proxy="https://proxy-host:proxy-port/"

失敗ケース:動作ログ

terminal(PowerShell)
PS C:\Docker\sls> docker-compose build --no-cache
Building serverless
Step 1/3 : FROM python:3.7-alpine
 ---> a5d195bb2a63
Step 2/3 : RUN apk update  && apk add --no-cache nodejs npm git
 ---> Running in 973765ea344f
fetch http://dl-cdn.alpinelinux.org/alpine/v3.11/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.11/community/x86_64/APKINDEX.tar.gz
ERROR: http://dl-cdn.alpinelinux.org/alpine/v3.11/main: IO ERROR
WARNING: Ignoring APKINDEX.70f61090.tar.gz: No such file or directory
ERROR: http://dl-cdn.alpinelinux.org/alpine/v3.11/community: IO ERROR
WARNING: Ignoring APKINDEX.ca2fea5b.tar.gz: No such file or directory
2 errors; 35 distinct packages available
ERROR: Service 'serverless' failed to build: The command '/bin/sh -c apk update  && apk add --no-cache nodejs npm git' returned a non-zero code: 2