古い CasaOS チュートリアルは、今でもアーキテクチャの方向性としては正しいものです。通常のマルチユーザー利用では Nextcloud に実際のデータベースを使用すべきですが、2024 年の追補記事では「Connection refused」エラーが解決されていません。 ユーザーは Nextcloud と MariaDB をブリッジネットワーク上に配置していましたが、それでもコンテナ同士は接続できませんでした。
現在のより安全な構成は、両方のサービスを 1 つの Docker Compose プロジェクト、または 1 つの共有ユーザー定義ネットワークで実行し、コンテナ IP ではなく MariaDB のサービス名を Nextcloud の接続先に指定することです。
元のスレッドで実際に確認されたこと
2023 年の元の投稿にはチュートリアルへのリンクがありました。2024 年には、別のユーザーが Nextcloud の管理者アカウント設定中に SQLSTATE[HY000] [2002] Connection refused が発生し、コンテナ同士が通信できていないのではないかと推測していました。スレッド内のその後の返信で、解決策が確認された形跡はありません。
つまり、「両方をブリッジに配置する」だけでは完全な解決策として提示すべきではありません。
共有 Compose ネットワークとサービス名を使用する
現在の Nextcloud MariaDB Compose の例では、MariaDB サービスに dbという名前を付け、Nextcloud コンテナに MYSQL_HOST=dbを設定しています。Docker の内部 DNS により、データベースはサービス名で解決されます。
これは、一時的な 172.x.x.xコンテナアドレスを入力するよりも、堅牢な方法です。
両方の側でデータベース認証情報を一致させる
Nextcloud には、MariaDB が作成するものと同じデータベース名、ユーザー名、パスワードが必要です。現在の Nextcloud データベースガイドでは、本番環境向けの構成に MariaDB を推奨し、必要なデータベース値を説明しています。
ホスト名は解決できるのに認証に失敗する場合は、スタックを再作成する前に、MariaDB の環境変数、Nextcloud の設定値、データベースログを比較してください。
データベースと Nextcloud のデータを両方永続化する
MariaDB の状態をコンテナレイヤー内だけに保存しないでください。/var/lib/mysqlと、使用するイメージで定義されている Nextcloud のアプリケーションおよびデータのパスを永続化してください。データベースは、Nextcloud の設定とユーザーデータとともにバックアップします。
Nextcloud の導入ガイドでは、データベースやアプリケーション用のストレージと、大容量のユーザーファイルを分けて管理する方法を説明しています。
結論
フォーラムの「Connection refused」に関する追補記事では、問題は解決されていませんでした。現在の CasaOS または ZimaOS 環境では、1 つの Compose スタックまたは 1 つの共有 Docker ネットワークを使用し、サービス名で Nextcloud から MariaDB に接続し、認証情報を一致させ、アプリケーションとデータベースのストレージを両方永続化してください。
