Docker-Compose Postgres 接続が拒否されました: 接続の問題の解決
Postgres を使用した Docker-Compose セットアップで、次の問題について説明しました。 pg-admin を使用して Postgres に接続できますが、から接続しようとすると接続の問題が発生します。 Go.
問題は、Go コード内でデータベースのホスト名を参照する方法に起因します。 POSTGRES_HOST を postgres として使用しています。これは、Docker-Compose 構成内の Postgres のコンテナー/サービス名です。ただし、Go コードでは、データベース サービスの実際のコンテナ名であるデータベースに接続しています。
この問題を解決するには、2 つのオプションがあります:
オプション1: Docker-Compose でコンテナー名を変更する
docker-compose.yaml ファイル内のデータベース サービスの名前を次から変更します。データベースをpostgresに変換します。これにより、Go コードで使用しているコンテナ名とホスト名が一致します。
オプション 2: 明示的なホスト名フィールド
または、明示的なホスト名を追加することもできます。 Docker-Compose 構成のデータベース サービスへのフィールド:
database: build: database restart: always hostname: postgres
これにより、データベースのホスト名が設定されますコンテナを postgres に追加します。これは、Go コードで参照しているホスト名と一致します。
その他の考慮事項
さらに、Docker 内に専用ネットワークを作成することを検討することもできます。 - コンテナーが相互に安全かつ効率的に通信できるように構成を構成します。その方法は次のとおりです。
docker-compose.yaml ファイルで、次のように、専用ネットワークを使用する各サービスにネットワーク セクションを追加します。
database: # ... networks: - mynet backend: # ... networks: - mynet
次に、次のように定義します。 docker-compose.yaml ファイルの末尾にあるネットワーク:
networks: mynet: name: my-shared-db-network
これにより、という名前の新しいネットワークが作成されます。コンテナが通信に使用できる my-shared-db-network。
これらのソリューションのいずれかを実装すると、Docker-Compose セットアップ内で Go から Postgres データベースに正常に接続できるようになります。
以上がpgAdmin は正常に接続しているにもかかわらず、Go アプリケーションが Docker Compose Postgres データベースへの接続を拒否するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。