ペンギン村 Tech Blog

技術をこよなく愛するエンジニア集団が在住するペンギン村から、世界へ役立つ(かもしれない)技術情報を発信する技術系ブログです。某アラレちゃんが済む村とは一切関係ありません。んちゃ!

【Docker】alpine の `apk update` でエラーが発生した時のメモ

どうも、tobi462 です。

今日は docker-compose build での apk update 時に以下のエラーが発生した時の対処メモです。

Step 7/11 : RUN apk update
 ---> Running in 45856361a825
fetch http://mirrors.aliyun.com/alpine/v3.4/main/x86_64/APKINDEX.tar.gz
ERROR: http://mirrors.aliyun.com/alpine/v3.4/main: temporary error (try again later)
WARNING: Ignoring APKINDEX.47c31cae.tar.gz: No such file or directory

Tl;Dr

Docker のバージョンを最新にしたら解決しました。

$ sudo apt-get install docker-ce
$ docker -v
Docker version 18.03.1-ce, build 9ee9f40

突然の死

Jenkins / Ubuntu 16.04 LTS にシステムを自動デプロイをしていたのですが、ある日からデプロイに成功しなくなりました。

そして Job のログを見ると以下のようなエラーが出ていました。

fetch http://mirrors.aliyun.com/alpine/v3.4/main/x86_64/APKINDEX.tar.gz
ERROR: http://mirrors.aliyun.com/alpine/v3.4/main: temporary error (try again later)
WARNING: Ignoring APKINDEX.47c31cae.tar.gz: No such file or directory

どうやら docker-compose build 時、何かをDLしようとしたときにエラーになっているようです。

その後、 RUN コマンドを分解して実行したところ、 apk upate で失敗していることがわかりました。

しかし、ローカル(Mac)で docker-compose build しても成功します。

エラーメッセージでぐぐったらいろいろ情報が見つかったので、色々試してみました。

curl で DL できるか試してみる

URLが死んでいるのかと思い、まずは curl でアクセスできるか試してみました。

$ curl -o x.tar.gz http://mirrors.aliyun.com/alpine/v3.4/main/x86_64/APKINDEX.tar.gz
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  663k  100  663k    0     0  1654k      0 --:--:-- --:--:-- --:--:-- 1654k

どうやらこれは問題ないようです。

ミラーリポジトリを試してみる

ググった中にミラーリポジトリを試してみると良い、という情報があったので試してみました。

どうやら alpine では /etc/apk/repositories にパッケージマネージャ用のリポジトリURLが記載されているようです。

# cat /etc/apk/repositories
http://dl-cdn.alpinelinux.org/alpine/v3.4/main
http://dl-cdn.alpinelinux.org/alpine/v3.4/community

そこで DockerfileRUN コマンドを追加して、ミラーリポジトリを追記してみました。

RUN echo http://mirror.yandex.ru/mirrors/alpine/v3.5/main > /etc/apk/repositories; \
    echo http://mirror.yandex.ru/mirrors/alpine/v3.5/community >> /etc/apk/repositories

残念ながらこの方法では解決しませんでした。

まぁ、 curl で DL は出来ていたのであまり期待はしていませんでしたが。

IP v6 を有効にしてみる?

正直、これはあまり理解していなかったのですが、以下のように /etc/modulesipv6 を足してみたら解決したという記事があったので試してみました。

こういう時、Docker は環境を壊す心配をせずに試せるのでありがたい限りです。

RUN echo "ipv6" >> /etc/modules

まぁ、これも駄目だったのですが。

docker のバージョンアップ

そもそもなぜローカルのMacではビルドが成功するのだろう、と思って Docker のバージョンを調べてみました。

すると、ローカルでは 18.x 系だったのに、Ubuntu 16.04 LTS では 17.x 系でした。

なので試しに Ubuntu 上の Docker も最新にしてみることにしました。

$ sudo apt-get update
$ sudo apt-get install docker-ce

実のところあまり期待していなかったのですが、これで解決しました。

おわり

ということでトラブル対処メモでした。役に立つ人もいるかもしれないので記事にしました。

今回のケースでは Docker のバージョンアップで解決しましたが、状況によって解決策は異なるかもしれません。