Docker で開発していると、latest等を指定していても、
下記のように N ヶ月前のようなイメージが残る事が多いかと思います。
$ docker image ls
rockylinux 9-minimal dfaa211c6b30 12 months ago 118MB
rockylinux 9.3-minimal dfaa211c6b30 12 months ago 118MB
rockylinux 8.9-minimal f63d8d2889fd 12 months ago 93.3MB
新しいイメージを使いたい場合、
古いイメージを消してしまって、新しいイメージを pull すれば良いのかな?
と思うじゃないですか。
$ docker rmi f63d8d2889fd
Error response from daemon: conflict: unable to delete f63d8d2889fd
(cannot be forced) - image has dependent child images
はい、消せません。上記の例の場合、
Rocky Linux 8.9-minimal を元にビルドした関連イメージがあるので、
関連イメージを全て消さないとダメな訳です。
携わっているプロジェクトが多いと、
依存する全てのイメージを削除してビルドし直すのはしんどい...
一時的な解決策
docker-compose.yml や Dockerfile は新しいプロジェクトとしてコピーし、
コンテナ名は適当に新しい名前にします。
それから目的の Docker Hub ページにアクセスしてダイジェスト値をコピーします。
新しいDockerfile の FROM の後ろに「@」をつけてダイジェスト値を貼り付ける
Dockerfile
- FROM rockylinux:9.3-minimal
+ FROM rockylinux:9.3-minimal@sha256:305de618a5681ff75b1d608fd22b10f362867dff2f550a4f1d427d21cd7f42b4
docker compose up -d 等で、
今回の例では、6ヶ月前に公開されたイメージを使う事ができます。
RockyLinux Minimal 何か脆弱性でてますね... あとで見ておこう...。