QNAPのCloudflaredをSSHでアップデートする方法【Docker Compose対応】

QNAPのCloudflaredをSSHでアップデートする方法【Docker Compose対応】

2026年3月23日

はじめに

QNAP NAS上でDockerを使ってCloudflare Tunnelを運用していると、コンテナのログにこんな警告が表示されることがあります。

WRN Your version 2025.4.2 is outdated. We recommend upgrading it to 2026.3.0

image: cloudflare/cloudflared:latestと書いていても、Dockerは一度プルしたイメージをキャッシュとして使い続けます。 そのためlatestタグを指定しているだけでは自動的に最新版にはなりません。

この記事では、SSHを使ってCloudflaredを最新バージョンにアップデートする手順を解説します。


この記事でわかること

  • QNAPのSSHを一時的に有効にする方法
  • SSHでDockerイメージを最新版にプルする方法
  • Docker Composeでコンテナを再作成する方法
  • 作業後にSSHを無効に戻す方法(セキュリティ対策)

環境

  • QNAP NAS(本記事ではTS-464)
  • ContainerStation(Docker Compose対応)
  • Cloudflare Tunnel運用中
  • SSH接続ソフト:TeraTerm

Step 1:QNAPのSSHを有効にする

セキュリティのポイント SSHは普段は無効にしておき、作業時だけ有効にして終わったら無効に戻すことを強くおすすめします。常時有効にしておくと不正アクセスのリスクが高まります。

  1. QNAPの管理画面にログイン
  2. コントロールパネル を開く
  3. 左メニューの ネットワークとファイルサービス をクリック
  4. Telnet / SSH をクリック
  5. 「SSH接続を許可する」 にチェックを入れる
  6. ポート番号はデフォルト22のまま(セキュリティを高めたい場合は変更推奨)
  7. 適用 をクリック

注意 Telnet接続は暗号化されないため、絶対に有効にしないでください。SSHのみを有効にします。

QNAPコントロールパネルの Telnet/SSH 設定画面。「SSH接続を許可する」にチェックが入っている状態

Step 2:TeraTermでSSH接続する

  1. TeraTermを起動
  2. ホスト欄にQNAPのIPアドレスを入力(例:192.168.x.xx
  3. ポート番号:22、サービス:SSHを選択
  4. OKをクリック
  5. ユーザー名:admin(権限者の名前)、(NASで決めた)パスワードを入力してログイン
TeraTerm のSSH接続設定ダイアログ。QNAPのIPアドレスとポート22が入力されている
TeraTerm のSSH認証ダイアログ。ユーザー名とパスワードを入力してQNAPにログインする画面

ログインに成功するとこのようなプロンプトが表示されます。

[admin@NASxxxxxx ~]$

Step 3:現在のCloudflaredバージョンを確認する

まず現在動いているコンテナを確認します。

docker ps | grep cloudflared
docker ps | grep cloudflared の実行結果。古いイメージで cloudflared コンテナが稼働中と表示されているSSH画面

実行結果の例:

aaaaaaaaaaaa   cloudflare/cloudflared:latest   "cloudflared --no-au…"   7 months ago   Up 4 days   cloudflared
bbbbbbbbbbbb   cloudflare/cloudflared:latest   "cloudflared --no-au…"   7 months ago   Up 4 days   cloudflared_2tsuji

7 months agoとあるように、**7ヶ月前のイメージがそのまま使われています。**これがバージョンが古い原因です。


Step 4:最新イメージをプルする

以下のコマンドで最新イメージをダウンロードします。

docker pull cloudflare/cloudflared:latest

実行結果の例:

latest: Pulling from cloudflare/cloudflared
ce49d46500be: Pull complete
...
Status: Downloaded newer image for cloudflare/cloudflared:latest

Status: Downloaded newer imageと表示されれば新しいイメージの取得成功です。

docker pull cloudflare/cloudflared:latest の実行結果。「Status: Downloaded newer image」が表示されたSSH画面

Step 5:コンテナを再作成する

新しいイメージをダウンロードしただけでは、まだ古いコンテナが動いています。 コンテナを再作成して新しいイメージを適用します。

docker-compose.ymlの場所を確認する

まずdocker-compose.ymlがどこにあるか確認します。

find /share -name "docker-compose.yml" 2>/dev/null

実行結果の例:

/share/CACHEDEV4_DATA/docker/your_blog/docker-compose.yml
/share/CACHEDEV4_DATA/docker/your_blog2/docker-compose.yml

コンテナを再作成する

docker-compose.ymlがあるディレクトリに移動してコンテナを再作成します。

cd /share/CACHEDEV4_DATA/docker/your_blog
docker compose up -d --force-recreate cloudflared

実行結果の例:

[+] Running 1/1
✔ Container cloudflared  Started   1.0s
docker compose up -d --force-recreate cloudflared の実行結果。「Container cloudflared Started」が表示されたSSH画面

複数サイトを運用している場合 サイトごとにdocker-compose.ymlが分かれている場合は、それぞれのディレクトリで同じ作業を繰り返します。

サービス名が異なる場合のトラブルシューティング no such service: cloudflaredというエラーが出た場合は、docker-compose.yml内のサービス名が異なります。以下のコマンドでサービス名を確認してください。

cat docker-compose.yml | grep -A2 "cloudflare" の実行結果。サービス名を確認するSSH画面
cat docker-compose.yml | grep -A2 "cloudflare"

サービス名を確認したうえで、正しい名前で再実行します。

docker compose up -d --force-recreate cloudflared_your_blog2

Step 6:アップデートを確認する

以下のコマンドで新しいバージョンが適用されているか確認します。

docker logs cloudflared 2>&1 | grep -i "version\|outdated"

実行結果の例:

2026-03-22T14:55:36Z INF Version 2026.3.0
docker logs cloudflared のバージョン確認結果。「Version 2026.3.0」が表示され最新版への更新完了を示すSSH画面

outdatedの警告が消えて最新バージョンが表示されれば完了です。


Step 7:SSHを無効に戻す(重要)

作業が終わったら必ずSSHを無効に戻します。

  1. コントロールパネルネットワークとファイルサービスTelnet / SSH
  2. 「SSH接続を許可する」のチェックを外す
  3. 適用 をクリック
QNAPコントロールパネルの Telnet/SSH 設定画面。「SSH接続を許可する」のチェックを外してSSHを無効化した状態

まとめ

今回実施したコマンドをまとめます。

# 1. 現在のコンテナ確認
docker ps | grep cloudflared

# 2. 最新イメージをプル
docker pull cloudflare/cloudflared:latest

# 3. コンテナを再作成(necosuke_blogの例)
cd /share/CACHEDEV4_DATA/docker/necosuke_blog
docker compose up -d --force-recreate cloudflared

# 4. バージョン確認
docker logs cloudflared 2>&1 | grep -i "version\|outdated"

latestタグを使っていても定期的にdocker pullしてコンテナを再作成することで常に最新バージョンを維持できます。

今回説明したのが、自分の環境ではなく依頼での環境のため伏せ字が多くなってしまいました。見に悪くてすみません。


関連記事