>  기사  >  데이터 베이스  >  Node.js에서 MySQL Docker 컨테이너에 연결할 때 ECONNREFUSED가 발생하는 이유는 무엇입니까?

Node.js에서 MySQL Docker 컨테이너에 연결할 때 ECONNREFUSED가 발생하는 이유는 무엇입니까?

DDD
DDD원래의
2024-11-10 22:22:03160검색

Why Am I Getting ECONNREFUSED When Connecting to a MySQL Docker Container from Node.js?

MySQL Docker 컨테이너에 연결: ECONNREFUSED 해결

이 문서에서는 MySQL Docker 컨테이너에 연결할 때 자주 발생하는 ECONNREFUSED 오류를 해결합니다. Node.js.

배경

다중 컨테이너 Dockerized 애플리케이션에서는 데이터베이스 컨테이너(예: MySQL)를 갖고 다른 컨테이너에서 이에 연결하는 것이 일반적입니다. (예: Node.js 웹 애플리케이션) 그러나 이 연결은 Node.js 애플리케이션이 데이터베이스에 연결할 수 없다는 신호를 보내는 ECONNREFUSED 오류로 인해 실패할 수 있습니다.

문제 이해

Docker 컨테이너를 구성할 때 포트 매핑이 중요합니다. 일반적인 오해는 "3307:3306"과 같은 포트 매핑이 컨테이너가 포트 3307에서 수신 대기 중임을 의미한다는 것입니다. 그러나 컨테이너는 일반적으로 내부 포트에서 수신 대기합니다. MySQL의 경우 컨테이너 내의 포트 3306에서 수신 대기합니다.

해결책: Node.js 구성 및 DNS 수정

이 문제를 해결하려면 노드를 수정하세요. .js 구성을 사용하여 포트 3306에서 데이터베이스에 연결하고 올바른 DNS를 지정합니다. 이 경우 DNS는 docker-compose.yml에 정의된 대로 'mysql'입니다.

이렇게 하면 Node.js 구성이 다음과 같이 업데이트됩니다.

const config = {
    host: 'mysql',  // Replace 'localhost' with the container DNS
    database: 'mydb',
    port: '3306',
    user: 'mysql',
    password: '1234',
    connectionLimit: 10
}

또한 docker-compose.yml의 명령:

command: ["./wait-for-it.sh", "mysql:3306"]  // Update the port number

이렇게 하면 "wait-for-it.sh" 스크립트가 MySQL이 컨테이너 내의 포트 3306에서 수신 대기할 때까지 기다립니다.

결론

포트 매핑 메커니즘을 이해하고 Node.js 구성과 DNS를 업데이트하면 다음이 가능합니다. ECONNREFUSED 오류를 해결하고 Dockerized 환경 내에서 Node.js 애플리케이션과 MySQL 컨테이너 간의 성공적인 연결을 설정하세요.

위 내용은 Node.js에서 MySQL Docker 컨테이너에 연결할 때 ECONNREFUSED가 발생하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.