Estoy tratando de conectar el nodo con mysql a través de dokcer-compose. Puedo acceder a mysql con el banco de trabajo, pero cuando intento conectarme con el nodo, aparece el error:
Error: connect ECONNREFUSED 127.0.0.1:3306 at TCPConnectWrap.afterConnect [as oncomplete] (net.js: 1054: 14))¿Alguien sabe qué está pasando?
version: '3' services: #App Service app: image: "node:alpine" container_name: cms-node restart: unless-stopped tty: true working_dir: /app environment: - NODE_ENV=production ports: - 1234:1234 volumes: - ./:/app links: - db depends_on: - db #Mysql Service db: image: mysql:latest container_name: cms-mysql restart: unless-stopped # command: --default-authentication-plugin=mysql_native_password environment: MYSQL_DATABASE: CMS MYSQL_USER: root MYSQL_PASSWORD: root MYSQL_ROOT_PASSWORD: root ports: - 3306:3306 const db: Connection = mysql.createConnection({ host: 'localhost', user: 'root', password: 'root', database: 'CMS', }); export default db; db.connect((err) => { if (err) { throw err; } console.log('Connected!'); });Debe utilizar el nombre del enlace (de forma predeterminada, el nombre del servicio vinculado) como nombre de host al que conectarse. Consulte la documentación de docker-compose.yml para obtener más información.
Así que solo use host: 'db' en lugar de host: 'localhost'
Sí, tenemos que usar el nombre del servicio de docker-compose.yml . Me enfrenté a un problema similar cuando había un servidor API Gateway personalizado ( que funcionaba como proxy ) escrito en node.js que se conectaba a otros dos servicios. Entonces, reemplazar localhost:3001 con serviceName:30001 solucionó el problema.
Código de ejemplo:
... const proxy = require('express-http-proxy'); ... app.use('/json-parser', proxy('json_parsing_api:3001')); app.get('/json-parser/json-to-person', proxy('json-to-person'));