Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

1.3K
Vistas
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 Respuestas
Responde la pregunta

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 Denunciar

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 Denunciar

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 Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda