[Docker]alpineベースのイメージのビルド時にglibcインストールのエラーが出た時の回避策

2022.12.18

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

  • t_o_dと申します。
  • Dockerでalpineをベースにしたnodeイメージでその中にglibcをインストールした環境を利用しています。
  • その環境を久々にビルドした際にエラーが出て構築できなかったため、その回避策を記録いたします。

環境

  • mac OS Ventura 13.1
  • Docker version 20.10.17-rd

修正前の内容

  • 修正前のDockerfileの内容は以下です。
FROM node:18-alpine

ENV GLIBC_VER=2.35-r0

WORKDIR /tmp

RUN apk update --no-cache && \
    apk add --no-cache git curl binutils && \
    curl -sL https://alpine-pkgs.sgerrand.com/sgerrand.rsa.pub -o /etc/apk/keys/sgerrand.rsa.pub && \
    curl -sLO "https://github.com/sgerrand/alpine-pkg-glibc/releases/download/${GLIBC_VER}/glibc-${GLIBC_VER}.apk" && \
    curl -sLO "https://github.com/sgerrand/alpine-pkg-glibc/releases/download/${GLIBC_VER}/glibc-bin-${GLIBC_VER}.apk" && \
    apk add --no-cache glibc-${GLIBC_VER}.apk glibc-bin-${GLIBC_VER}.apk && \
    rm -rf /var/cache/apk/*
  • 以前まではビルドが通っていたのですが、以下のようなエラーが出るようになりました。
$ docker build -t sample .

(1/7) Installing glibc (2.35-r0)
ERROR: glibc-2.35-r0: trying to overwrite etc/nsswitch.conf owned by alpine-baselayout-data-3.4.0-r0.

修正後の内容

  • こちらのissueを参考に以下のようにapkでインストールする際のオプションとして--force-overwriteを追記しました。
FROM node:18-alpine

ENV GLIBC_VER=2.35-r0

WORKDIR /tmp

RUN apk update --no-cache && \
    apk add --no-cache git curl binutils && \
    curl -sL https://alpine-pkgs.sgerrand.com/sgerrand.rsa.pub -o /etc/apk/keys/sgerrand.rsa.pub && \
    curl -sLO "https://github.com/sgerrand/alpine-pkg-glibc/releases/download/${GLIBC_VER}/glibc-${GLIBC_VER}.apk" && \
    curl -sLO "https://github.com/sgerrand/alpine-pkg-glibc/releases/download/${GLIBC_VER}/glibc-bin-${GLIBC_VER}.apk" && \
    apk add --force-overwrite --no-cache glibc-${GLIBC_VER}.apk glibc-bin-${GLIBC_VER}.apk && \
    rm -rf /var/cache/apk/*
  • 再度ビルドしてエラーが出ないことを確認します。
    • ※WARNINGは出るがビルドとしては成功しています。
$ docker build -t sample .

WARNING: glibc-2.35-r0 xxxxxxx
Successfully built xxxxxxxxx
Successfully tagged sample:latest
  • 以上です。

まとめ

  • 軽量なイメージとして利用が多いalpineですが、その中でglibcを使いたいケースは多いと思われるためひとまず回避できて安心しました。
  • 現時点での回避策が今回の修正であるため、引き続きベストになりそうな方法を調査及び検討していきます。

参考

アノテーション株式会社について

アノテーション株式会社は、クラスメソッド社のグループ企業として「オペレーション・エクセレンス」を担える企業を目指してチャレンジを続けています。「らしく働く、らしく生きる」のスローガンを掲げ、様々な背景をもつ多様なメンバーが自由度の高い働き方を通してお客様へサービスを提供し続けてきました。現在当社では一緒に会社を盛り上げていただけるメンバーを募集中です。少しでもご興味あれば、アノテーション株式会社WEBサイトをご覧ください。