Published on

도커를 이용해 데이터베이스에 접속하기

Authors
  • avatar
    Name
    손예지(Liv)

도커를 사용해 Postgresql 접속하기

첫번째 팀 프로젝트를 진행하면서 Postgresql 을 사용해보게 되었습니다. 저희 팀은 도커 컨테이너를 사용해 데이터베이스를 사용하기로 했습니다. 도커를 사용하기 위해 공통의 docker-compose.yml을 설정하고, URL, 아이디, 비밀번호는 환경변수로 .env 파일로 관리하기로 했습니다. 이전에 도커를 사용해 MYSQL을 연동해본 적이 있고, Postgresql은 로컬에서 연동해본 적이 있기 때문에 설정에 문제가 없을것 같다고 생각했습니다. 하지만 아래와 같이 데이터베이스 접속에 계속해서 실패하는 오류가 발생했습니다.

Actual Results

psql -h localhost -p 5432 -U postgres -d delivery
psql: 오류: "localhost" (127.0.0.1), 5432 포트로 서버 접속 할 수 없음: FATAL:  role "postgres" does not exist

해결 방법

처음에는 도커를 통해서 데이터베이스에 자동적으로 사용자 등록이 안되는것 같아 직접 접속해 사용자를 생성하고 권한을 부여했습니다. 그리고 아래와 같이 \du를 통해 사용자 조회를 했을때 올바르게 권한이 부여된 것을 확인했습니다.

delivery=# \du
                             List of roles
 Role name |                         Attributes
-----------+------------------------------------------------------------
 admin     | Superuser, Create role, Create DB, Replication, Bypass RLS

docker container 에서 데이터베이스로 접속이 잘 되는 부분을 확인 했지만 localhost 통해서 접속이 안된다는 부분까지 확인을 했습니다. 며칠동안 검색을 하고, 팀원들에게 물어봐도 도저히 해결되지 않아 튜터님께 여쭤봤습니다. 제가 겪고 있는 문제를 들어보신 후 로컬에 Postgresql 이 설치된 적이 있냐고 물어봐주셨고, 포트 번호를 바꿔볼까요? 라고 질문 해주셨습니다. 놀랍게도 포트번호를 바꾸자 마자 접속에 성공했습니다.

알게된점

도커를 사용하면 새로운 공간이 생기니까 로컬에 설치되어있는 데이터베이스가 있어도 도커 내에서 새롭게 설정을 해야 한다는 것은 알고 있었는데, 동일한 포트도 사용할 수 있다고 생각하고 있었습니다. 한 포트는 한번에 하나의 프로세스만 사용할 수 있기 때문에 포트 충돌이 발생한다는 것을 알게 되었습니다.

docker-compose 파일을 설정할때 5432:5432가 의미하는 것은 내 컴퓨터의 포트:컨테이너 내부의 포트로, 컨테이너 내부에서는 항상 5432를 통해 접근하지만 외부에서 접근하는 포트는 다르게 매핑할 수 있다는 것을 알게 되었습니다.