환경 : windows10, nestjs, docker, mysql
ports:
- '3307:3306'
ERROR [TypeOrmModule] Unable to connect to the database. Retrying (1)...
v0.2 | Error: connect ECONNREFUSED 127.0.0.1:3306
연결 실패에는 호스트가 잘못됐을 수도 있고 포트번호가 잘못됐을 수도 있고 워낙 가능한 원인이 많아서 이것 저것 다 시도해보았는데, 저 3306포트로 연결시도를 하는 것이 계속 거슬렸다. 컨테이너에서 외부포트를 3307로 하도록 했는데, nest에서는 여전히 3306으로 시도하고 있는 것이 문제 같아 보였다.
db연결 설정하는 환경변수에서 포트를 3307로 바꿨는데도 여전히 3306으로 시도했다. 아무래도 .env를 읽지 않고 있는 것 같았다.
env_file:
- .env
찾아보니 nest 컨테이너에 위와 같은 설정을 추가했더니 3307로 연결을 시도하기 시작하여서 이 문제는 해결되었다.
ERROR [TypeOrmModule] Unable to connect to the database. Retrying (1)...
v0.2 | Error: connect ECONNREFUSED 127.0.0.1:3307
여기서 희안한 점은, 워크벤치로 로컬 3307포트로 연결 시도하면 연결이 성공한다는 것이었다. 127.0.0.1:3307이라는 mysql 컨테이너는 분명 잘 성생된 것이고, 이것에 nest가 연결을 못하는 것이 문제인 것으로 생각되었다.
그리고 컨테이너 안의 db이지만 호스트 주소를 사용한다는 것도 일단 알게되었다.
도커 컴포즈에서 두 컨테이너 간에 같은 네트워크를 사용하도록 하는 설정도 해보고, db 호스트명을 mysql로도 해보고 컨테이너 이름인 mysql-1로도 해보고 이것저것 다 해봤는데 다 안됐다.
DB_HOST=host.docker.internal
#172.17.0.1
172.17.0.1 is the IP-address of the host in Docker’s default network.
연결 성공.
감사합니다 :) 계속 삽질했는데 해결됐네요