私は Docker を使用して Nextcloud サービスを実装しています。これには、公式の nextcloud-apache イメージ、Nginx リバース プロキシ、certbot、および MariaDB を使用します。特に特別なことはありません。
私の Docker インスタンスは、スウォーム モードで実行されます。すべてのコンテナーは、各サービスに 1 つのレプリカ (標準オーバーレイ ネットワーク) のみを持つ同じホスト上のマネージャーとともに実行されます。スウォームは、標準の Compose ファイルを使用して起動されます。
私のセットアップは、昨夜、不可解なことに壊れるまで、何ヶ月も安定して動作していました。私が見る限り、OS (Ubuntu Server LTS)、Docker-CE、またはどのイメージについても、更新や再起動はまったく行われていませんでした (私は定期的にすべての更新を手動で行っており、昨夜午前 4 時に実行したわけではありません)。原因を Nextcloud コンテナーまで追跡しました (ただし、これは Docker の問題だと思うので、ここで質問します...):
Nginx リバース プロキシのログには次の行が表示されます。
2022/04/06 20:16:45 [error] 10#10: *3 nextcloud-app could not be resolved (3: Host not found), client: 10.135.40.1, server: <redacted>, request: "GET / HTTP/1.1", host: "<redacted>"
Nginx はバックエンド サーバーを解決できず、502/Bad Gateway をクライアントに返します。
確認したところ、Nextcloud コンテナのホスト名 ("nextcloud-app") は、docker 内部 DNS (各コンテナの 127.0.0.11 で利用可能) に登録されていません。コンテナにログインして DNS 要求を発行できますが (after apt-get update && apt-get install iputils-ping dnsutils
コンテナ内で実行した後)、名前 "nextcloud-app" はどこにも解決されません。例:
root@nextcloud-app:/var/www/html# nslookup nextcloud-app
Server: 127.0.0.11
Address: 127.0.0.11#53
** server can't find nextcloud-app: NXDOMAIN
他のコンテナ名はすべて正常に解決されます。外部アドレスの解決も同様に機能します。「nextcloud-app」はのみ解決できないコンテナ名。
しかし、私はできるdocker-internal IP アドレスを直接使用して、nextcloud-app コンテナーとの間で ping を実行します。接続は確立されていますが、DNS 解決のみが失敗します。
これをさらにデバッグする方法がわかりません。1 週間、compose.yml ファイルに触れていません。私の知る限り、何も変わっていません。しかし、セットアップは一晩で機能しなくなりました。
Nextcloud コンテナに、docker 内部 DNS で独自のホスト名を強制的に登録させるにはどうすればよいですか? ご提案があれば、ぜひお聞かせください。
答え1
解決策を見つけました。この答えは、将来同じ問題に直面するかもしれないかわいそうな人のためのものです。
結局、それは Docker の問題ではなかったことが判明しました。夜間に Nextcloud がメンテナンス モードになりました (理由はまだ不明ですが、次に調査する必要があります)。メンテナンス モードでは、どういうわけか Nextcloud Docker イメージが Docker の DNS に登録できず (イメージのバグのためでしょうか)、状況がデッドロックしました。DNS 解決なし、リバース プロキシ経由で Nextcloud にアクセスできない --> Nextcloud がメンテナンス モードになっていることに気付かない --> メンテナンス モードがずっと続く、DNS 解決なし、...
Nextcloud がメンテナンス モードになっているかどうか確認していれば、デバッグと頭を悩ませる時間を数時間節約できたかもしれません。Nextcloud をメンテナンス モードから解除するのは数分で済みました。今は少しバカな気がします。 ;-)