ピックアップ
docker-composeのbuildがDebian系で「exit code: 100」のエラーになった件
Dockerの立ち上げに関しては、
- Dockerfileというファイルを作成する
- ビルドしてDockerイメージを作成する
- Dockerイメージからコンテナを作成する
- コンテナに接続してログインする
という手順を行って、
上記をやってみたあとに、
- Dockerのイメージの確認
- Dockerのコンテナの確認
- Dockerのコンテナの停止と削除
などを行っていました。
この辺りは、
コマンドで実行したことがあるので、
その辺りは、
【簡易サンプル】Dockerの基本的な手順とコマンドサンプル
こちらを参考にしてください。
今回は、
docker-compose
を使っているのですが、
ビルドする中で、
failed to solve: executor failed running
[/bin/sh -c apt-get update]:
exit code: 100
このようなエラーが発生。
今回の件を、
自分の備忘録として、
忘れないうちにメモを残しておきます。
エラー内容
実行処理としては、
docker-compose -f docker-compose.sample.yml build
という形で、
docker-compose.sample.yml
というファイルを準備して、
そちらをビルドする流れてで進めていました。
このビルドを実行したところ、
failed to solve: executor failed running
[/bin/sh -c apt-get update]:
exit code: 100
このエラーが発生しました。
考えられる原因
こちら動かすymlファイルは、
# base
FROM php:8.1-fpm
:
# apt
RUN apt-get update
という感じで、
php fpmベースでしたが、
他のアプリケーション構築でも使っており、
正常に挙動しており、
なぜだろうかとは思っていました。
考えられる原因としては、
- Dockerビルド時のリソース不足
- ネットワークの問題
- Dockerのバージョンに関する問題
- Dockerのイメージやコンテナ・キャッシュによる問題
- Debian系の問題
が考えられます。
最終的には、
「Dockerのイメージやコンテナ・キャッシュによる問題」
+
「Debian系の問題」
ということが原因かなと思いました。
この辺りは対処加えて、
原因として考えられることなどはメモ。
Debian系の仕様変更
この点は、ChatGPTで確認してみたところ、
2025年初頭、
DebianのAPTリポジトリ署名鍵が更新され、
古い鍵が期限切れになったため、
古いイメージでは署名検証に失敗するようになった変更です。
一次情報は Debian の公式 debian-archive-keyring
パッケージの changelog に載っています。
ここに 2025 年の鍵更新(旧鍵期限切れ・新鍵追加)の記録があります。
パッケージ情報
https://packages.debian.org/debian-archive-keyring
Changelog(2025年の更新記録あり)
Add 2025–2027 archive signing keys
Retire expired 2023 keys
のような記述があり、これが今回の署名エラーの直接の原因です。とのことです。
個人的に、
このDebian系の署名エラーの対応で、
そのまま、apt対応の追加でいけるかなと思いましたが、
うまくいきませんでした。
Dockerのイメージやコンテナ・キャッシュによる問題
この点に関しては、
php fpm 8.1パッケージ自体が、
最新のDebian系に対応していないということかなと思いましたが、
他のコンテナで同じパッケージを使用しており、
直近では動いていた(ビルドは長らくやってませんでしたが)。
この点で、
このパッケージ自体が対応できていないのであれば、
今後、使えないのかなと思いながら、調査していました。
aptでのupdateをせずにビルドをするとうまくいく、
そして、
立ち上げた環境で、
apt update
をやると同じように、
exit code: 100
のエラーになるので、
この時点のままでのエラー解決は諦めました。
その上で、
最後の考えられることとして、
現在の自分の環境にあるDockerイメージや、
使っている・使っていたコンテナ・キャッシュ周りが影響して、
うまくビルドが動いていないことが考えられます。
キャッシュされたイメージやコンテナが原因で、
問題が発生していることもあるようなので、
まずは、(これは解決策ではありません)
docker-compose -f docker-compose.sample.yml build --no-cache
こちらで、
ビルドしているキャッシュ自体を使わないで、
ビルドプロセスを試してみます。
しかし、同じようなエラーとなります。
ビルドプロセスで使用されるベースイメージが更新された場合など、
キャッシュされた状態が原因でビルドが失敗することがあるようなので、
Dockerイメージやコンテナのキャッシュをクリア
を行います。
コマンド
docker system prune -a
こちらを実行すると、
今までのイメージやキャッシュがクリアされます。
こちらでクリアしたのちに、
再度、ビルドプロセスを試します。
docker-compose -f docker-compose.sample.yml build
こちらを実行したら、
うまくビルドが完了しました。
これで解決ですね。
コマンドメモ
今回の
docker system prune
こちらのメモ。
docker system prune
は Docker 内の未使用リソースをまとめて削除します。
実行時の挙動は以下の通りです(確認あり、-f
で確認スキップ)。
削除対象:
- 停止中のコンテナ
- 未使用のイメージ(dangling image)
- 未使用のネットワーク(ただし
bridge
,host
,none
は残す) - ビルドキャッシュ(
docker builder prune
相当)
オプション:
-a
: 参照されていないすべてのイメージも削除(danglingだけでなくタグ付きも)--volumes
: 未使用のボリュームも削除(データ消えるので注意)
このコマンドで古いDebianベースのキャッシュレイヤーが消え、
再ビルド時に最新のベースイメージがpullされて署名エラーが解消しました。
おすすめ書籍
コメント一覧
コメントはまだありません。
コメントを残す