Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

1.3K
Views
La API Dockerized NodeJS no se puede conectar a un contenedor MySQL, getaddrinfo ENOTFOUND

Mi docker-compose.yml se ve así:

 version: '3' services: api: build: context: . dockerfile: Dockerfile image: api container_name: app-api restart: unless-stopped env_file: ./.env ports: - '8080:8080' volumes: - ./src - ./node_modules command: yarn start depends_on: - mysql mysql: container_name: app-mysql restart: always image: mysql:8.0.21 environment: MYSQL_ROOT_PASSWORD: 'root' MYSQL_USER: 'app' MYSQL_PASS: 'password' MYSQL_DATABASE: 'appdb' volumes: - ./data:/var/lib/mysql ports: - '3307:3306'

Mi .env se ve así:

 DB_HOST="mysql" // Tried 127.0.0.1, 0.0.0.0 DB_PORT="3306" DB_USER="app" DB_PASSWORD="password" DB_NAME="appdb" NODE_ENV="DEV"

Error que recibo del servicio: {"message":"Database connection failed with error Error: getaddrinfo ENOTFOUND \"mysql\"","level":"info","timestamp":"2020-07-27T03:57:55.524Z"}

Puedo conectarme con root desde MySQL Workbench, no puedo conectarme con la app de usuario. Si la API se inicia sin estar en un contenedor docker, puede conectarse a la base de datos local.

Parece que simplemente no puede resolver el host en absoluto, ¿es un problema de DNS? No recuerdo si tuve el mismo problema cuando mysql no estaba acoplado, pero no podía conectarse a una base de datos que está fuera de un contenedor. Qué estoy haciendo mal.

Editar: comentar todo el servicio mysql no tiene ningún impacto, el mensaje de error es el mismo.

over 4 years ago · Santiago Trujillo
3 answers
Answer question

0

Creé un servicio API más simple para probar la configuración: funciona correctamente. Debe haber sido algo con la API repetitiva que estaba usando.

Si alguien está mirando, cosas que descubrí:

  • Es mejor tener una red definida por el usuario y luego agregar esa red a ambos servicios.
  • Si api se conecta a un MySQL host local (máquina), configurar el host en host.docker.internal en lugar de 127.0.0.1 o mysql funciona: se conecta a un servidor db en su máquina.
  • La carpeta ./data en realidad no estaba vacía, parece que mysql descargó todas sus cosas allí.
over 4 years ago · Santiago Trujillo Report

0

Docker interpreta las comillas dobles en un archivo .env de manera diferente a un sistema Unix. Específicamente, las comillas dobles se consideran parte de la cadena.

https://docs.docker.com/compose/env-file/

No hay un manejo especial de las comillas. Esto significa que son parte del VAL.

Elimine las comillas en su archivo .env y estará bien.

over 4 years ago · Santiago Trujillo Report

0

Tenía el mismo problema. Estoy usando Docker Secrets a través de docker-compose para cargar el host mysql en mi aplicación Node y tenía una nueva línea al final de mi archivo secreto para el nombre de host mysql.

... Entonces, en caso de que esté utilizando Docker Secrets, es posible que desee verificar si hay una nueva línea no deseada al final de su archivo secreto.

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!