>백엔드 개발 >Golang >pgAdmin이 성공적으로 연결되었음에도 불구하고 Go 애플리케이션이 Docker Compose Postgres 데이터베이스에 대한 연결을 거부하는 이유는 무엇입니까?

pgAdmin이 성공적으로 연결되었음에도 불구하고 Go 애플리케이션이 Docker Compose Postgres 데이터베이스에 대한 연결을 거부하는 이유는 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2024-12-31 16:03:10179검색

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 코드에서 데이터베이스 호스트 이름을 참조하는 방식에서 발생합니다. Docker-Compose 구성에서 Postgres의 컨테이너/서비스 이름인 POSTGRES_HOST를 postgres로 사용하고 있습니다. 그러나 Go 코드에서는 데이터베이스 서비스의 실제 컨테이너 이름인 데이터베이스에 연결하고 있습니다.

이 문제를 해결하려면 다음 두 가지 옵션이 있습니다.

옵션 1: Docker-Compose에서 컨테이너 이름 변경

docker-compose.yaml 파일의 데이터베이스 서비스 이름을 데이터베이스에서 다음으로 변경합니다. postgres. 이렇게 하면 Go 코드에서 사용 중인 컨테이너 이름과 호스트 이름이 일치하게 됩니다.

옵션 2: 명시적 호스트 이름 필드

또는 명시적인 호스트 이름을 추가할 수 있습니다. 필드를 Docker-Compose 구성의 데이터베이스 서비스에 추가합니다.

database:
  build: database
  restart: always
  hostname: postgres

이것은 데이터베이스 컨테이너의 호스트 이름을 설정합니다. Go 코드에서 참조하는 호스트 이름과 일치하는 postgres에 연결합니다.

추가 고려 사항

또한 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.