No se puede conectar nodejs y mysql en la misma window acoplable

Soy nuevo en Docker y estoy tratando de hacer que mi nodejs express corra dentro de él. Estoy intentando instalar las dependencies usando shellscript y su funcionamiento, pero al final no puedo conectarme a mysql.

Mi file docker instala mysql, crea un usuario y una database, e instala nodejs también. Luego ejecuta npm install e intenta iniciar mi aplicación, pero knex dice que no se puede conectar al mysql con el post:

Knex:Error Pool2 - Error: connect ECONNREFUSED /var/run/mysqld/mysqld.sock 

Aquí hay una esencia con el código que estoy usando. (la parte nodejs está incompleta, solo con la parte importante):

https://gist.github.com/jradesenv/527f6e59ab2e7985c38fbed3a2084c83

Espero que alguien tenga una buena idea sobre cómo resolverlo o eliminarlo.

Los contenedores Docker están diseñados para ejecutar un solo command. El instalador de MySQL espera que el service que registró se inicie automáticamente en el arranque del sistema operativo, pero ese no es el caso dentro de un contenedor.

La solución adecuada es dividirlos en dos contenedores separados, un contenedor db y otro contenedor nodejs / app. Enlace y ejecute los dos junto con una configuration de compuerta-compose que configura automáticamente los nombres de host.

La opción less ideal es la supervisión, que puede usar para ejecutar y gestionar múltiples processs dentro del contenedor. Usted lo instala como cualquier otra aplicación, configura su aplicación db y nodo como dos services para su administración, y luego ejecuta supervisord como el command de ejecución de su contenedor.

La mejor práctica es mantener los componentes de un micro service separados en su propio contenedor.

Ver por ejemplo " Learn Docker construyendo un microservice " de Dave Kerr .

enter image description here

Él declara dos services:

 version: '2' services: users-service: build: ./users-service ports: - "8123:8123" depends_on: - db environment: - DATABASE_HOST=db db: build: ./test-database 

Con un file Docker dedicado para la database:

 FROM mysql:5 ENV MYSQL_ROOT_PASSWORD 123 ENV MYSQL_DATABASE users ENV MYSQL_USER users_service ENV MYSQL_PASSWORD 123 ADD setup.sql /docker-entrypoint-initdb.d 

Use docker-compose y cree un dockerfile para su nodejs y otro para mysql. Cada contenedor es responsable de hacer lo suyo. En tu networkingacción, vincúlalos. A continuación, apunte su connection nodejs db al contenedor mysql.