ホームページ >バックエンド開発 >Golang >pgAdmin は正常に接続しているにもかかわらず、Go アプリケーションが Docker Compose Postgres データベースへの接続を拒否するのはなぜですか?

pgAdmin は正常に接続しているにもかかわらず、Go アプリケーションが Docker Compose Postgres データベースへの接続を拒否するのはなぜですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-12-31 16:03:10169ブラウズ

Why is my Go application refusing a connection to my Docker Compose Postgres database, despite pgAdmin connecting successfully?

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。