ある日突然、自宅サーバーで運用している 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 などの自動更新ツールを入れておくのが安全ですね。