ubuntu-latest(Ubuntu 26.04)の kind load docker-image:「ctr: content digest ... not found」と Docker 29 の containerd イメージストア
ubuntu-latest は、2026年10月19日から11月19日にかけて Ubuntu 24.04 から 26.04 に移ります(ほかに変わること)。26.04 のイメージの Docker は 29.4.2、24.04 は 28.0.4 です。Docker 29 は既定で containerd イメージストアを使い(docker info に io.containerd.snapshotter.v1 と出ます)、kind load docker-image で kind のクラスターにイメージを入れておくジョブは、準備のステップで止まります。
メッセージ
api7-ingress-controller #504 からです。ここでは e2e と適合性のジョブがすべて、テストが始まる前に落ちました:
ERROR: failed to load image: command "docker exec --privileged -i kind-control-plane ctr --namespace=k8s.io images import --all-platforms --digests --snapshotter=overlayfs -" failed with error: exit status 1 Command Output: ctr: rpc error: code = NotFound desc = content digest sha256:08d3b285700dffd91925e9d6328690d3336ac3adf6539aab94988bcecd727715: not found
nginx や busybox のようなマルチプラットフォームのイメージを pull すると、containerd イメージストアはインデックス全体を持ちますが、中身はランナーのプラットフォームの分だけです。kind load docker-image はイメージを保存して --all-platforms で読み込むので、ほかのプラットフォームの分を探し、最初に足りないブロブで落ちます。kind の issue は kind #3795 で、11月4日の時点でまだ開いています。api7 によれば kind v0.33.0 も kind の main ブランチも同じ読み込み方なので、kind を上げても直りません。datum-cloud/test-infra #84 によれば、ランナーでビルドした1つのプラットフォームのイメージは今も読み込めます。壊れるのはレジストリから pull したマルチプラットフォームのイメージです。
直し方1:1つのプラットフォームのアーカイブを読み込む
kind の既知の問題は、これを的を絞った直し方として載せています。ノードが動くプラットフォームの分だけを保存して、そのアーカイブを読み込みます:
docker image save --platform linux/amd64 --output /tmp/image.tar my-image:tag kind load image-archive /tmp/image.tar --name my-cluster
Arm64 のランナーでは linux/arm64 にします。docker image save --platform は Docker 28 以降が必要なので、古い Docker でも動かすスクリプトは、ストアが切れているときは kind load docker-image のままにしておけます。api7 の Makefile がこうしています。datum-cloud が見つけた落とし穴が1つあります。ランナーでビルドしたイメージだと、Docker 29.4.2 のアーカイブにはビルドの証明(attestation)も入っていて、kind はそれを余分なイメージとして読み込みます。
直し方2:containerd イメージストアを切る
Docker を 24.04 のときの状態に戻します。ランナーの /etc/docker/daemon.json は上書きせずに設定を足し、Docker を再起動して、ストアが変わったかを確かめます。datum-cloud のステップです:
- name: Use Docker's classic image store
run: |
set -euo pipefail
sudo mkdir -p /etc/docker
cfg='{}'
if sudo test -s /etc/docker/daemon.json; then cfg=$(sudo cat /etc/docker/daemon.json); fi
echo "$cfg" | jq '.features["containerd-snapshotter"] = false' | sudo tee /etc/docker/daemon.json >/dev/null
sudo systemctl restart docker
if docker info --format '{{ .DriverStatus }}' | grep -q io.containerd.snapshotter; then
echo "the containerd image store is still on"
exit 1
fi
このステップは、イメージを pull やビルドするより前に置きます。containerd ストアにあるイメージは、再起動のあと従来のストアからは見えません。skywalking-helm #204 には、固定していたテスト用のツールがこのような再起動をして、SkyWalking の Java の E2E でローカルにビルドしたイメージが見えなくなり、「pull access denied」で落ちた話があります。同じ理由で datum-cloud は、このステップを自分のジョブに置き、イメージを用意してから呼ばれることもある共有のアクションには入れませんでした。spiderpool #5854 も e2e のジョブで同じ設定を使っています。そこでは、sudo なしで systemctl restart docker を動かしていたやり直しの処理も直しています。新しいランナーでは「Access denied」で失敗するためです。
見分け方
- containerd イメージストアが有効なら、
docker info --format '{{ .DriverStatus }}'にio.containerd.snapshotter.v1と出ます。 - 失敗するコマンドは、kind がノードの中で動かす
ctr ... images import --all-platformsで、見つからないダイジェストはイメージのほかのプラットフォームの分です。 - 「Set up job」を見ます。Runner Image のグループに
ubuntu-26.04かubuntu-24.04と出ます。11月19日までは、やり直しが 24.04 に当たって通ることがあるので、やり直しで緑になっても何も証明されません。runs-on: ubuntu-24.04は、GitHub が 24.04 を引退させるまでは持ちます。 - containerd イメージストアはディスクも多く使います(
/var/lib/containerdの下):「No space left on device」。
26.04 のほかの失敗
- Ubuntu 26.04 の /etc/sysctl.conf:kind のクラスターは inotify のインスタンスも使い切り、「too many open files」になります。
- Ubuntu 26.04 の bubblewrap:
bwrapの中のサンドボックスが、AppArmor のbwrap-userns-restrictの下で落ちます。 - 「coreutils: unknown program」:基本のコマンドのほとんどが uutils です。
- Ubuntu 26.04 の sudo -E:
sudoは-Eを無視する sudo-rs です。 - Ubuntu 26.04 の apt:名前が変わった・無くなったパッケージ。
失敗したジョブを IntelliJ IDEA から見るなら
Pipeline Inbox for GitHub Actions Workflows は、Lesstep が作っている JetBrains IDE(2024.1 以降)のプラグインです。すべてのリポジトリの実行を、ジョブ・ステップと一緒に IDE のツールウィンドウに並べ、いまのブランチの実行はステータスバーに出ます。読むのは無料、失敗したジョブの再実行・キャンセル・ワークフローの実行・デプロイのレビューは Pro(月 US$1.50・30日の無料試用つき)です。
GitHub と GitHub Actions は GitHub, Inc. の商標、Ubuntu は Canonical Ltd. の商標、Docker は Docker, Inc. の商標、Kubernetes は The Linux Foundation の登録商標、IntelliJ IDEA は JetBrains s.r.o. の商標です。このページは GitHub, Inc.・Canonical・Docker, Inc.・The Linux Foundation・JetBrains のいずれとも提携しておらず、承認も受けていません。
ほかに:「The ubuntu-latest label will migrate to Ubuntu 26」 · Ubuntu 26.04 の /etc/sysctl.conf · 「No space left on device」 · IntelliJ IDEA で使える GitHub Actions のプラグインの比較 · English