$ Docker-compose up을 실행할 때, NestJS에서 Error: connect ECONNREFUSED 127.0.0.1:3301로 데이터베이스와 연동이 되지않는 이슈가 발생했다. Postgresql 연동 에러인데 에러 로그의 포트 번호가 3301 인 이유는 Docker-compose.yml 파일에서 아래와 같이 5432에서 3301로 포트 포워딩을 했기 때문이다.
의 답변처럼 127.0.0.1이나 localhost 대신 데이터베이스 host 주소에 데이터베이스 컨테이너 이름을 넣어보았다.
그래도 여전히 db를 찾을 수 없다는 에러가 출력되었다.
해당 스택오버 플로우의 두 번째 답변에 맥 환경에서 도커를 사용하면 localhost나, 127.0.0.1 대신 host.docker.internal을 사용하라고 적혀있었다. 링크되어있는 도커 문서를 읽어보니 첫 번째 답변처럼 host에 컨테이너 명을 입력하면 host에 존재하는 docker0라는 인터페이스 브릿지가 연결해주는 듯 하였다. 하지만 맥 환경에서는 Docker Desktop의 구현 방식으로 인해 docker0 bridge가 존재하지 않아서 host.docker.internal을 명시해야 된다고 되어있다.
db 호스트 명을 host.docker.internal으로 변경한 후, 아래처럼 정상적으로 TypeOrmModule이 Initialized 됨을 볼 수 있다.
Docker-compose로 db 구성 시, Error: connect ECONNREFUSED 127.0.0.1:5432 at TCPConnectWrap.afterConnect 발생
$ Docker-compose up을 실행할 때, NestJS에서 Error: connect ECONNREFUSED 127.0.0.1:3301로 데이터베이스와 연동이 되지않는 이슈가 발생했다. Postgresql 연동 에러인데 에러 로그의 포트 번호가 3301 인 이유는 Docker-compose.yml 파일에서 아래와 같이 5432에서 3301로 포트 포워딩을 했기 때문이다.
해당 에러가 왜 골치아픈 문제였냐면, 로컬에서도 연동되지 않고, Docker compose 환경에서도 연동되지 않았다면, 상관이 없는데 로컬 환경에서는 정상적으로 접근이 가능하지만, Docker 환경에서의 NestJS에서만 연동 에러가 발생하였기 때문이다.
구글링을 해보니 https://stackoverflow.com/questions/33357567/econnrefused-for-postgres-on-nodejs-with-dockers
의 답변처럼 127.0.0.1이나 localhost 대신 데이터베이스 host 주소에 데이터베이스 컨테이너 이름을 넣어보았다.
그래도 여전히 db를 찾을 수 없다는 에러가 출력되었다.
해당 스택오버 플로우의 두 번째 답변에 맥 환경에서 도커를 사용하면 localhost나, 127.0.0.1 대신 host.docker.internal을 사용하라고 적혀있었다. 링크되어있는 도커 문서를 읽어보니 첫 번째 답변처럼 host에 컨테이너 명을 입력하면 host에 존재하는 docker0라는 인터페이스 브릿지가 연결해주는 듯 하였다. 하지만 맥 환경에서는 Docker Desktop의 구현 방식으로 인해 docker0 bridge가 존재하지 않아서 host.docker.internal을 명시해야 된다고 되어있다.
db 호스트 명을 host.docker.internal으로 변경한 후, 아래처럼 정상적으로 TypeOrmModule이 Initialized 됨을 볼 수 있다.
'개발 > Docker' 카테고리의 다른 글