Discordソリューション

Docker 29へのアップデート後にCasaOSでアプリを読み込めない場合の解決方法

A CasaOS feedback thread surfaced a GitHub issue where Docker updates on Ubuntu caused installed apps to disappear from the CasaOS Web UI.

簡単に言うと:Dockerの更新後にCasaOSで突然「アプリの読み込みに失敗しました」と表示された場合は、CasaOSを再インストールする前にDocker Engine APIのバージョンを確認してください。Docker 29.0ではデーモンの最小APIがv1.44に引き上げられ、古いAPIを要求していたCasaOS App Managementクライアントが動作しなくなりました。その後、Docker 29.3では最小バージョンがv1.40に再び引き下げられたため、適切な対処は実際に使用しているDockerのビルドによって異なります。

まずDockerのバージョンを確認する

実行:

Dockerのバージョン

サーバーバージョンとAPIバージョンのフィールドを確認します。DockerのAPIネゴシエーションによって、クライアントとデーモンは共通のAPIバージョンに合意できます。ただし、これはデーモンが受け入れ可能なバージョンの範囲内に限られます。

この境界はDocker 29で変わりました。Docker 29.0では、デーモンAPIの最小バージョンがv1.44に引き上げられました。Docker 29.3.0では、最小バージョンがv1.40に引き下げられました。したがって、Docker 29のAPI下限はバージョンによって異なります。

Dockerバージョン 最小Engine API CasaOSにとっての意味
29.0.x~29.2.x v1.44 古いCasaOS App Managementクライアントは、古すぎるとして拒否される可能性があります。
29.3.0以降 v1.40 当初のv1.44という下限は、現在では同じ障害要因ではありません。古い回避策を適用する前に、ログを確認してください。

APIの不一致が実際のエラーであることを確認する

App Storeが空白になる原因を、すべてDocker 29の互換性問題だと決めつけないでください。サービスログを確認します。

journalctl -u casaos-app-management --no-pager -n 100

主な障害は次のように表示されます。

クライアントバージョン1.43は古すぎます。
サポートされる最小APIバージョンは1.44です

このメッセージは、UIの障害がApp Storeのカタログ問題ではなく、Docker APIの互換性に起因することを強く示しています。Dockerのアップグレード後に同じ症状が再現したというCasaOSの報告が複数あり、元のDocker更新による障害もその一例です。

Docker自体は動作しているのにCasaOSが壊れる理由

CasaOSはDocker Engineに取って代わるものではありません。CasaOSのアプリ管理サービスは、Engine APIを介してDockerと通信します。CasaOSのUIがコンテナの照会、作成、管理を行えなくなっても、Dockerコンテナ自体は正常に稼働し続ける場合があります。

そのため、次のようなコマンドが使えます。

docker ps
docker images

CasaOSがアプリを読み込めないと表示している場合でも、動作する可能性があります。Docker CLIとCasaOSのアプリ管理は別々のAPIクライアントであり、必ずしも同じAPIバージョンを要求するとは限りません。

CasaOSとDockerの関係については、CasaOSのDocker管理で詳しく説明しています。ここでは、Dockerベースのアプリケーションに対するビジュアルレイヤーとしてCasaOSを使用しています。

APIオーバーライドで古いDocker 29インストールを修正する

API v1.44が引き続き必要なDocker 29ビルドでは、systemdを通じてデーモンが受け入れる最小バージョンを下げる方法が、テスト済みの回避策の1つです。報告されているCasaOS互換性修正では、次を使用します。

sudo systemctl edit docker.service

追加します。

[Service]
Environment=DOCKER_MIN_API_VERSION=1.24

次にDockerを再起動します。

sudo systemctl daemon-reload
sudo systemctl restart docker

オーバーライドを確認します。

systemctl show docker | DOCKER_MIN_API_VERSIONをgrepする

これは互換性オーバーライドであり、サーバーを古いアプリケーションスタックのまま無期限に使い続ける理由にはなりません。古いAPIクライアントがデーモンと通信できるようにするものです。

現在のインストーラーですでに修正されているか確認する

CasaOSのメンテナーは後に、インストールスクリプトが現行のDocker Engineをインストールし、新しいバージョン向けにDocker APIの互換性オーバーライドを適用するよう更新されたと報告しました。このメンテナーによる更新は、インストーラーの互換性更新に記載されています。

CasaOSのインストールがその変更より前のものである場合、手動オーバーライドを恒久的に維持するよりも、現在の公式インストーラーを再実行する方が簡潔な場合があります。既存のサーバーを変更する前に、重要なアプリデータとカスタム設定をバックアップしてください。

古い回避策を使用しない場合

もし Dockerのバージョン Docker 29.3以降で、最小APIがすでにv1.40であることが示されている場合は、無闇に強制しないでください。 DOCKER_MIN_API_VERSION=1.24。まずCasaOS App Managementのログを確認してください。別のエラーには別の修正方法が必要です。

たとえば、DNS障害、レジストリへのアクセス不良、アプリメタデータの破損、CasaOSサービスの停止などによっても、APIバージョンの問題ではないのにApp Storeが空に見えることがあります。

修正後のCasaOSを確認する

Dockerの再起動後、3つの層をすべて確認してください。

  1. Docker:docker psが正常に返ります。
  2. CasaOSサービス:systemctl status casaos-app-managementがactiveになり、APIの不一致がログに記録されなくなります。
  3. Web UI:インストール済みアプリとApp Storeが再び読み込まれます。

Dockerは動作しているのにCasaOS App Managementがまだ失敗する場合は、Dockerの後にこのサービスを再起動してください。

sudo systemctl restart casaos-app-management

アプリケーションスタックを比較するユーザー向けに、ZimaOSアプリプラットフォームでは、現在のワンクリックアプリモデルを紹介しています。DockerとCasaOSのテスト用にコンパクトなx86マシンが必要な場合、ZimaBoard 2は、対応OSとしてCasaOSを公式に掲載しています。

よくある質問

Docker 29では必ずCasaOSが動かなくなりますか?

いいえ。Docker 29.0ではEngine APIの最小バージョンがv1.44に引き上げられましたが、Docker 29.3.0ではv1.40に引き下げられました。回避策を選ぶ前に、正確なDockerバージョンとCasaOSのログを確認してください。

コンテナがまだ動作しているのはなぜですか?

コンテナはDocker Engineによって管理されます。CasaOS App Managementは別のクライアントです。デーモンと既存のコンテナが動作し続けていても、そのAPI接続は失敗することがあります。

Dockerをダウングレードすべきですか?

必ずしもそうではありません。APIの上書きは、影響を受けたDocker 29のインストール環境で有効な回避策でしたが、その後のDockerリリースでは最小APIバージョンが再び変更されました。互換性を正常に復元できない場合に、ダウングレードは選択肢の一つにすぎません。

これが同じ問題だと証明するログはどれですか?

DockerクライアントAPIが古すぎ、デーモンにはAPI v1.44以降が必要だというエラーを示すログを探してください。その証拠がなければ、Docker 29の問題だと決めつけず、引き続きトラブルシューティングを行ってください。