기록방

Bug Report : Docker postgreSQL 접속 오류 본문

CS/DataBase

Bug Report : Docker postgreSQL 접속 오류

Soom_1n 2024. 5. 6. 21:16

AWS EC2 환경에 Docker-compose를 이용해서 PostgreSQL 이미지를 컨테이너로 실행시켰다.

로컬 IntelliJ에서 연결해서 사용하고 싶었는데, 계속 다음과 같은 오류가 났다.

 

[28P01] FATAL: password authentication failed for user "[유저이름]"

 

Docker-compose.yaml에 설정한 PostgreSQL 명령어는 다음과 같다.

 

version: '3'
services:

 # ~~~
 
  postgres:
    container_name: postgres_container
    image: postgres:16.2
    restart: always
    environment:
      POSTGRES_USER: --생략--
      POSTGRES_PASSWORD: --생략--
      POSTGRES_DB: --생략--
    ports:
      - --생략--:5432
    volumes:
      - --생략--:/var/lib/postgresql/data
      
  # ~~~

 

해결을 위해 2가지 작업이 필요했다.

 

1. 비밀번호 특수문자 인코딩 문제

기존 POSTGRES_PASSWORD를 어렵게 하려고 'Q!W@E#R$T%' 이런 식으로 해놨는데, 특수문자의 경우 yaml에서 변수로 읽거나 하는 인코딩 에러가 있을 수 있다고 한다. ($ 등)

그래서 비밀번호를 그냥 영문+숫자로 만들고, docker-compose down / docker-compose up -d를 실행했다.

 

하지만, 그대로 오류가 났다.

 

혹시 DB 설정 부분인 environment 의 세 변수가 적용이 안된 걸까 해서 컨테이너에서 실행되고 있는 PostgreSQL에 접속해서 '\du' 로 사용자를, '\l' 로 DB 이름을 보았는데 잘 적용되어 있었다. 인증 방식의 문제인가 싶어서, PostgreSQL 의 인증 방식이 설정되어 있는 pg_hba.conf를 뜯어보았다. 역시 기본 세팅이 잘 되어있었다.

 

2. 볼륨 삭제

결론적으로 문제는 비밀번호 인코딩과 이전 DB의 볼륨이 지워지지 않았기 때문이다. docker-compose로 컨테이너를 다시 실행했다고 하더라도 볼륨은 EC2에 남기도록 했기 때문에, 이전 설정이 남아있었던 것 같다.

비밀번호를 바꾸고, 볼륨도 지워주니 접속에 성공했다.

 

GPT와 신나게 떠들며 DB 설정에대해 자잘한 것들을 알게 되었다.

728x90