【Traefik】突然の404エラー!Docker APIバージョンの不整合が原因だった話

ある日突然、自宅サーバーで運用している FreshRSS にアクセスできなくなりました。
昨日までは普通に使えていたのに、ブラウザには無情な 404 page not found の文字が。

リバースプロキシとして使っている Traefik と、Docker の間で起きていたバージョンの不整合が原因でした。
備忘録として、症状から解決までの流れをまとめます。

🚨 症状

  • freshrss.example.com にアクセスすると 404 Not Found になる。
  • コンテナ自体は docker-compose ps で見ても正常に起動している (Up)。
  • Traefik のダッシュボードやAPIを確認しようとしても反応がない、または該当のルーターが見当たらない。

🕵️‍♂️ 原因調査

まずは Traefik のログを確認しました。

docker logs traefik --tail=50

すると、以下のようなエラーが大量に出力されていました。

ERR github.com/traefik/traefik/v3/pkg/provider/docker/pdocker.go:86 > Failed to retrieve information of the docker client and server host error="Error response from daemon: client version 1.24 is too old. Minimum supported API version is 1.44, please upgrade your client to a newer version" providerName=docker
犯人は「Docker APIバージョン」

エラーメッセージにある通りです。

client version 1.24 is too old. Minimum supported API version is 1.44

Traefik コンテナ(クライアント)が使っている Docker API のバージョン(1.24)が、ホスト側の Docker Engine が要求する最小バージョン(1.44)よりも古くなってしまったことが原因です。

おそらく、ホストOS (apt upgrade 等) で Docker Engine のバージョンが上がり、古い API バージョンのサポートが切られたタイミングで、ずっと更新していなかった古い Traefik コンテナが通信できなくなったのだと推測されます。

Traefik は Docker プロバイダーとして動作する際、Docker ソケット (/var/run/docker.sock) を通じてコンテナのラベル情報を読み取ります。この通信が拒否されたため、「FreshRSS のコンテナは起動しているが、Traefik はその存在(ルーティング設定)を認識できない」 状態になっていました。

🛠️ 解決策

Traefik の Docker イメージを最新にして、コンテナを作り直すだけで解決しました。

# Traefik のディレクトリに移動
cd /path/to/traefik

# 最新イメージを取得
docker-compose pull traefik

# 再構築(設定ファイル等はそのまま)
docker-compose up -d traefik

再起動後、ログを確認するとエラーが消え、正常に証明書の取得やルーティングが開始されました。

docker logs traefik
# => "Provider error" が消え、正常なアクセスログが流れるように

💡 教訓

「動いているからヨシ!」で塩漬けにしていたインフラ周りのコンテナですが、ホスト側のアップデートとの乖離が進むとこういう形で突然死することがあります。

特に Docker や Traefik のような基盤部分は、定期的に docker-compose pull して更新するか、Watchtower などの自動更新ツールを入れておくのが安全ですね。