PM2 환경에서 서버에 연결하고 접속하려고 하였으나 아래와 같은 ECONNREFUSED 오류가 발생하며 연결이 되지 않았습니다.
2|server | Error: connect ECONNREFUSED 127.0.0.1:3305
2|server | at PromisePool.query (/home/ubuntu/multi-player/node_modules/mysql2/promise.js:356:22)
2|server | at pool.query (file:///home/ubuntu/multi-player/src/DB/database.js:25:26)
2|server | at findUserByDeviceId (file:///home/ubuntu/multi-player/src/DB/user/user.db.js:8:30)
2|server | at initialHandler (file:///home/ubuntu/multi-player/src/handler/user/initial.handler.js:13:22)
2|server | at Socket.<anonymous> (file:///home/ubuntu/multi-player/src/events/onData.js:28:13)
2|server | at Socket.emit (node:events:517:28)
2|server | at addChunk (node:internal/streams/readable:368:12)
2|server | at readableAddChunk (node:internal/streams/readable:341:9)
2|server | at Readable.push (node:internal/streams/readable:278:10)
2|server | at TCP.onStreamRead (node:internal/stream_base_commons:190:23) {
2|server | code: 'ECONNREFUSED',
2|server | errno: -111,
2|server | sql: undefined,
2|server | sqlState: undefined,
2|server | sqlMessage: undefined
2|server | }
- 포트 매핑 문제
- MySQL 컨테이너의 기본 포트 3306을 호스트 머신의 3305 포트에 매핑해야 하는데, 애플리케이션이 여전히 기본 포트 3306으로 설정되어 있어 연결이 거부됨.
- MySQL 서버 실행 여부
- Docker 컨테이너에서 MySQL 서버가 정상적으로 실행이 되지 않고 있어 문제 발생.
우연히 베이직반에 들어가 튜터님들의 도움을 받아 해결되었다.(실화)
원인을 살펴보니 DB의 비밀번호가 일치하지 않아 이를 바꾸어 주었고, 데이터베이스의 포트도 3306으로 변경하여 컨테이너의 MySQL 포트에 연결하니 문제가 해결되었다.
명확한 Docker 네트워크 이해
- Docker 환경에서 MySQL과 같은 서비스 컨테이너에 접근하려면, 네트워크 설정과 포트 매핑이 잘 이루어져야 한다는 점을 알게 되었고, 특히 호스트와 컨테이너 간 네트워크 통신을 정확히 이해하고 설정해야 하고 작은 포트 설정 실수가 애플리케이션 연결 문제로 이어질 수 있음을 경험했습니다.