🐳
Alpine Linux v3.11のEOLでちょっとだけ苦しんだ話
👋v3.11がEOLに
2021/11/01にalpine v3.11がEOLになったみたいです。
🔍Dockerhubでalpineベースのimageにアップデートを確認
サンプルでNode.js
画像のように直近でアップデートがされていたことを確認。
👀docker build時の変化
docker build時に依存関係を検索するalpineのパッケージが以下のように変更されていました。
↓🧑💻環境
今回使用したDockerfile
FROM node:14.18.1-alpine
RUN apk add --no-cache --virtual .build-deps coreutils && \
cp /bin/date /usr/local/bin/date && \
apk del --purge .build-deps
ENTRYPOINT ["sh"]
😇コマンドが動かなくなってる
コンテナの中で今まで以下のようにGNUcoreutilsのdate
コマンドを利用していました。
date +%Y/%m/%d --date '-1 days ago'
2021/11/09
が、build後のイメージで動かしていたところ、以下のようなエラーが発生。
date +%Y/%m/%d --date '-1 days ago'
Error loading shared library libutmps.so.0.1: No such file or directory (needed by /usr/local/bin/date)
✍️原因
alpine v3.14用のパッケージに含まれるcoreutils
のバージョンがアップデートされていたことが判明。
v3.14のcoreutils
v3.11のcoreutils
coreutils-8.32-r2
の依存関係をよく見ると、エラーメッセージで見た様なパッケージが。。
🎉直った
最終的には、以下のようにDockerfileを修正することで解決に至りました。
FROM node:14.18.1-alpine
# utmpsが足りなかった依存パッケージ
RUN apk add --no-cache utmps && \
apk add --no-cache --virtual .build-deps coreutils && \
cp /bin/date /usr/local/bin/date && \
apk del --purge .build-deps
ENTRYPOINT ["sh"]
📚余談
元々GNUcoreutilsのdate
コマンドを使っていたので、このような解決方法に至りましたが、
BusyBoxのdate
コマンドを使って回避することもできます。
# BusyBox
date -d "1970.01.01-00:00:$(( $( date +%s ) - $(( 24 * 60 * 60 )) ))" +%Y/%m/%d
2021/11/09
# GNU
date +%Y/%m/%d --date '-1 days ago'
2021/11/09
Discussion