Contents
1️⃣ エラーの本質と発生シーン
| 発生条件 | 主なメッセージ |
|---|---|
| クライアントがデーモンより新しい | client is newer than daemon |
| クライアントがデーモンより古い | client is older than daemon |
Docker は後方互換性を保つ設計ですが、CLI が要求する API バージョンと Engine が提供できるバージョンが合わないと、上記のようなエラーでコマンドが失敗します。典型的なシーンは次の通りです。
- ローカル環境 – Docker Desktop が自動更新された直後に、バックグラウンドの Engine が旧バージョンのまま残っている
- CI ランナー – 古い CLI(例: 20.10 系)で最新の Engine(23.x 系)に接続した場合
2️⃣ 現在の API バージョンを素早く確認する方法
|
1 2 |
docker version --format '{{.Client.APIVersion}}/{{.Server.APIVersion}}' |
- 出力例
1.44/1.42→ 不一致 - 同一であれば
1.44/1.44のように表示されます。
取得日時を明示
本コマンドは実行時点の情報をそのまま返すため、CI ジョブやスクリプトの冒頭で必ず実行し、ログに残しておくことが推奨されます。
3️⃣ バージョン不一致を解消する基本手順
3.1 クライアントとデーモンを同一バージョンに揃える
Linux(apt / yum)
|
1 2 3 4 5 6 |
# Ubuntu/Debian 系 – 最新版へ更新 sudo apt-get update && sudo apt-get install -y docker-ce docker-ce-cli containerd.io # CentOS/RHEL 系 – 任意のバージョンへダウングレード例 (23.0.2) sudo yum downgrade -y docker-ce-23.0.2 docker-ce-cli-23.0.2 containerd.io |
Docker Desktop(Mac / Windows)
- UI で確認
メニューバー → Docker → Settings → About に表示される「Version」欄が現在のバージョンです。 - 自動取得スクリプト例(macOS)
|
1 2 3 4 |
# 最新リリース情報を GitHub API から取得し、アップデートを促す curl -s https://api.github.com/repos/docker/desktop/releases/latest \ | grep '"tag_name":' | cut -d '"' -f4 |
注意:記事執筆時点(2026‑04‑20)では Desktop の最新版は 4.28 系ですが、上記 API を利用すれば常に最新バージョンを取得できます。
3.2 環境変数で一時的に合わせる
|
1 2 |
export DOCKER_API_VERSION=$(docker version --format '{{.Server.APIVersion}}') |
- 効果:CLI がサーバーの API バージョンと同じバージョンでリクエストを送信するようになる。
- 留意点:新機能が使用できなくなる可能性があるため、根本的なアップデートまでの暫定策として利用してください。
4️⃣ デーモン再起動と確認フロー
| OS | 再起動コマンド |
|---|---|
| Docker Desktop | UI → Troubleshoot → Restart Docker |
| Linux (systemd) | sudo systemctl restart docker && sudo systemctl status docker |
再起動後は必ず API バージョンを再確認します。
|
1 2 3 |
docker version --format '{{.Client.APIVersion}}/{{.Server.APIVersion}}' # 例: 1.44/1.44 → OK |
5️⃣ CI/CD 環境でのバージョン統一策(マルチツール対応)
5.1 GitHub Actions
|
1 2 3 4 5 |
- name: Set up Docker (fixed version) uses: docker/setup-docker@v2 with: version: "23.0.2" # 必要に応じて変更 |
5.2 GitLab CI
|
1 2 3 4 5 6 7 8 9 |
docker: image: docker:23.0.2-dind services: - name: docker:dind alias: docker variables: DOCKER_HOST: tcp://docker:2375/ DOCKER_TLS_CERTDIR: "" |
5.3 Azure Pipelines
|
1 2 3 4 |
- task: DockerInstaller@0 inputs: dockerVersion: '23.0.2' # 固定バージョン指定 |
5.4 Jenkins (Declarative Pipeline)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
pipeline { agent any stages { stage('Docker Setup') { steps { script { sh ''' curl -fsSL https://get.docker.com | bash -s -- --version=23.0.2 docker version --format '{{.Client.APIVersion}}/{{.Server.APIVersion}}' ''' } } } } } |
共通ポイント
「Docker Engine と CLI のバージョンをコード上で固定」 することで、ランナーごとの差異が原因となる不一致エラーを根本的に防げます。
6️⃣ docker‑machine を利用している場合の対策
|
1 2 3 4 5 6 |
# 例: dev という名前のマシンを最新版へアップグレード docker-machine upgrade dev # アップグレード後にバージョン確認 docker-machine ssh dev docker version --format '{{.Client.APIVersion}}/{{.Server.APIVersion}}' |
docker‑machine が提供する upgrade コマンドは、対象 VM の Engine を最新リリース(2026 年時点では 23.x 系)に自動置換します。
7️⃣ トラブルシューティングチェックリスト & 再現テスト
| No | 実施項目 | コマンド / 操作 | 成功基準 |
|---|---|---|---|
| 1 | API バージョン取得 | docker version --format '{{.Client.APIVersion}}/{{.Server.APIVersion}}' |
両方が同一か判定できる |
| 2 | 必要に応じて Engine 更新/ダウングレード | apt/yum/dmg 等 | バージョンが期待通りになる |
| 3 | 環境変数で暫定合わせ(任意) | export DOCKER_API_VERSION=$(docker version --format '{{.Server.APIVersion}}') |
エラーが消える |
| 4 | デーモン再起動 | UI / systemctl restart docker | 正常に稼働中 (systemctl status) |
| 5 | 再度 API バージョン確認 | 同上 | 一致 が表示される |
| 6 | docker‑machine 使用時は upgrade 実行 | docker-machine upgrade <name> |
Engine が最新になる |
| 7 | CI/CD パイプラインでバージョン固定 | setup-docker / GitLab CI の image 等 |
ビルドが成功する |
不一致を意図的に再現するテスト
|
1 2 3 4 5 6 7 8 9 10 |
# 1. 古い Engine (例: 20.10) をインストール sudo apt-get install -y docker-ce=5:20.10.24~3-0~ubuntu-focal # 2. CLI は最新版のまま残す(Docker Desktop 等) docker version --format '{{.Client.APIVersion}}/{{.Server.APIVersion}}' # → 1.44/1.41 (不一致) # 3. エラーメッセージ確認 docker ps # => client is newer than daemon |
この手順でエラーが再現できたら、チェックリストに沿って対策を進めれば確実に解消できます。
8️⃣ まとめ
- 根本原因は「クライアントとデーモンの API バージョン差」
docker version --format '{{.Client.APIVersion}}/{{.Server.APIVersion}}'で即座に不一致を検知できる- 基本的な解決策は Engine のアップデート/ダウングレード、もしくは DOCKER_API_VERSION 環境変数による一時合わせ
- Docker Desktop と Linux デーモンは再起動後に必ずバージョンを再確認
docker‑machineでもupgradeコマンドで統一可能- CI/CD パイプラインでは Docker のバージョン固定(GitHub Actions, GitLab CI, Azure Pipelines, Jenkins)を徹底し、ランナー間の差異を排除
- チェックリストと再現テスト手順を標準作業として組み込めば、トラブル対応が迅速かつ確実になる
上記フローを開発・運用プロセスに取り入れ、同様のエラーが再び起きないように環境を管理してください。