GitHub Container Registry(ghcr.io)にDockerイメージPUSHして、そのDockerイメージを参照する別のDockerイメージを作成して使用するときにハマったのでメモします。
状態
ベースDockerイメージ
ghcr.io/username/child:latest
Dockerfile
FROM python:3.8-slim
RUN echo "foo"
ベースDockerイメージを参照するDockerイメージ
ghcr.io/username/parent:latest
Dockerfile
FROM ghcr.io/username/child:latest
# 色々インストール
発生した問題
productionで使用するDocker
Dockerfile
FROM ghcr.io/username/parent:latest
# 色々ビルド
RUN python -v
この状態でPython
のバージョンを調べると3.8
になります。
Python
のバージョンを更新しようとして、ghcr.io/username/child:latest
のDockerfile
を更新しました。
Dockerfile
+ FROM python:3.9-slim
RUN echo "foo"
productionで使用するDockerを再度ビルドすると、Python
のバージョンが3.8
のままでした。
原因
ベースイメージをlatest
にしていても、常に最新のイメージを取得するわけではありません。
そのDockerfileがビルドされた時点でのlatest
のイメージを取得します。
そのため、ベースDockerイメージ
を更新したら、ベースDockerイメージを参照するDockerイメージ
も再度ビルドする必要があります。
当たり前のことなのですが、初めてハマりました。
まとめ
灯台下暗し