ubuntu-latest(Ubuntu 26.04)の「client version 1.32 is too old. Minimum supported API version is 1.40」:Docker 29 と Testcontainers
ubuntu-latest は、2026年10月19日から11月19日にかけて Ubuntu 24.04 から 26.04 に移ります(ほかに変わること)。26.04 のイメージの Docker は 29.4.2 で、デーモンは API 1.54 を話し、1.40 より古いものを断ります。24.04 のイメージの Docker 28.0.4 は、古いクライアントもまだ受け付けていました。docker の CLI のように、デーモンとバージョンを決め合うクライアントは影響を受けません。古いバージョンを決め打ちで送るクライアントが断られます。
Docker 29.0 で下限は 1.44 に上がり、29.3.0 で 1.40 に下がりました(Docker 29 のリリースノート)。そのため同じメッセージでも、Docker 29.0〜29.2 のマシンでは 1.44、ランナーでは 1.40 と出ます。
メッセージ
デーモン自身の答えです。ここでは /v1.32/ のパスを直接呼んでいたテスト用のプロキシに返されました(twilio-voice.js #492):
client version 1.32 is too old. Minimum supported API version is 1.40, please upgrade your client to a newer version
Testcontainers for Java はこれを隠します。コンテナを始めるテストのクラスがすべて一般的なメッセージで落ち、理由は Testcontainers 自身のログにしかありません(elioo-health #169・2179 件中 61 件が失敗):
java.lang.IllegalStateException: Could not find a valid Docker environment. Please see logs and check configuration
...
UnixSocketClientProviderStrategy: failed with exception BadRequestException (Status 400: {"message":"client version 1.32 is too old. Minimum supported API version is 1.40, please upgrade your client to a newer version"}
1.21.4 より前の Testcontainers は、何も設定が無いと docker-java の API のバージョンを 1.32 にします。thirdeye #1820 では、Testcontainers を使う最初のモジュールで 11 件が失敗、86 件が飛ばされ、ビルドがそこで止まったので、あとのモジュールは1つも動きませんでした。
直し方1:Testcontainers 1.21.4 か 2.x
1.21.4 は、最近の Docker Engine の変更に合わせて出た 1.x の版です。API 1.44 を試し、だめなら 1.32 に戻ります。thirdeye は1行のバージョンの変更だけで、コードを変えずに失敗が 11 件から 0 件になりました。2.x にも直しは入っていますが、アーティファクトの名前が変わります(たとえば mysql は testcontainers-mysql)。
書いたバージョンだけでなく、実際に動くバージョンを確かめます。elioo-health ではモジュールに 1.19.7 と書いていましたが、Spring Boot の BOM が testcontainers と jdbc を 1.20.4 に上げていて、1つのテストのクラスパスに2つのバージョンがありました。解決されたバージョンは gradle dependencies か mvn dependency:tree でわかり、Testcontainers のログの最初の行にも出ます(Testcontainers version: 1.20.4)。
直し方2:docker-java の API のバージョンを決めておく
まだ上げられないなら、デーモンが受け付けるバージョンを docker-java に渡します。Remote-Falcon #204 は、手元の Docker 29 でこうしています。~/.docker-java.properties に api.version=1.44 と書くか、テストの JVM に -Dapi.version=1.44 を渡します。
- name: Pin the docker-java API version run: echo 'api.version=1.44' >> ~/.docker-java.properties
docker-java は DOCKER_API_VERSION の変数を読まないので、こちらは効きません。
直し方3:ランナーのデーモンの下限を下げる
古いクライアントが自分では変えられないツールの中にあるなら、デーモンの側で受け付けます。liberia-emr #341 は、Testcontainers 1.15 を始める Maven のプラグインのためにこれが必要でした。このプラグインはいつも API 1.30 を求めます。そのステップは ubuntu-26.04 20261025.179.1 で通り、Docker 29.4.2, min API 1.24 と出しました:
- name: Allow older Docker API versions
run: |
sudo mkdir -p /etc/systemd/system/docker.service.d
printf '[Service]\nEnvironment=DOCKER_MIN_API_VERSION=1.24\n' \
| sudo tee /etc/systemd/system/docker.service.d/min-api-version.conf
sudo systemctl daemon-reload
sudo systemctl restart docker
docker version --format 'Docker {{.Server.Version}}, min API {{.Server.MinAPIVersion}}'
DOCKER_MIN_API_VERSION はデーモンが起動するときに読むので、ジョブの env: に書いても何も変わりません。再起動は動いているコンテナを止めることがあり、ジョブの services: のコンテナは最初のステップより前に始まります。services: のあるジョブでは、直し方1か2を選びます。
見分け方
docker version --format '{{.Server.APIVersion}} {{.Server.MinAPIVersion}}'は、26.04 のイメージでは1.54 1.40と出ます。services:かcontainer:のあるジョブでは、「Initialize containers」のステップのログに、26.04 ではDocker daemon API version: '1.54'、24.04 では'1.48'と出ます。- 「Set up job」を見ます。Runner Image のグループに
ubuntu-26.04かubuntu-24.04と出ます。11月19日までは、やり直しが 24.04 に当たって通ることがあるので、やり直しで緑になっても何も証明されません。runs-on: ubuntu-24.04は、GitHub が 24.04 を引退させるまでは持ちます。
26.04 のほかの失敗
- Ubuntu 26.04 の rootless Podman:
pastaの AppArmor のプロファイルが Podman の SIGTERM を断るので、Podman のソケット越しのdocker compose downが「rootless netns: kill network process: permission denied」で落ちます。 - Ubuntu 26.04 の kind load docker-image:Docker 29 の containerd イメージストアは pull したイメージの1つのプラットフォームの分しか持たないので、kind の読み込みが「ctr: content digest ... not found」で落ちます。
- Ubuntu 26.04 の Playwright:Playwright 1.50〜1.60 は「does not support chromium on ubuntu26.04-x64」と出します。
- Ubuntu 26.04 の /etc/sysctl.conf:inotify の上限が低いままなので、.NET のホストや kind のクラスターは「too many open files」になります。
- 「coreutils: unknown program」:基本のコマンドのほとんどが uutils です。
- 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. の商標、Java は Oracle とその関連会社の登録商標、IntelliJ IDEA は JetBrains s.r.o. の商標です。このページは GitHub, Inc.・Canonical・Docker, Inc.・Oracle・JetBrains のいずれとも提携しておらず、承認も受けていません。
ほかに:「The ubuntu-latest label will migrate to Ubuntu 26」 · Ubuntu 26.04 の kind load docker-image · Ubuntu 26.04 の Playwright · IntelliJ IDEA で使える GitHub Actions のプラグインの比較 · English