NodeJS + Mysql with Docker Compose 2

I am trying to create a docker build file for local deployment of my NodeJS application that connects to mysql server. I tried everything (read a lot of tutorials and some questions here on Stackoverflow), but I keep getting ECONNREFUSED error. This is my NodeJS Docker file:

##Nodejs FROM node:latest RUN useradd --user-group --create-home --shell /bin/false app ENV HOME=/home/app COPY package.json npm-shrinkwrap.json $HOME/playerground/ RUN chown -R app:app $HOME/* USER app WORKDIR $HOME/playerground RUN npm cache clean && npm install --silent --progress=false USER root COPY . $HOME/playerground RUN chown -R app:app $HOME/* USER app 

This is my Mysql Dockerfile:

 FROM mysql:latest ENV MYSQL_ROOT_PASSWORD root ENV MYSQL_DATABASE playerground ENV MYSQL_USER root ENV MYSQL_PASSWORD root 

And this is my docker writer:

 version: '2' services: db: build: ./database ports: - "3307:3306" playerground: build: context: . dockerfile: Dockerfile command: node_modules/.bin/nodemon --exec npm start environment: ENVIRONMENT: development ports: - "9090:9090" links: - db volumes: - .:/home/app/playerground - /home/app/playerground/node_modules 

Another thing is my configuration file from Nodejs:

 //Database 'development' : { 'host' : process.env.HOSTNAME || 'localhost', 'user' : 'root', 'password' : 'root', 'database' : 'playerground' }, //Server 'development' : { 'host' : process.env.HOSTNAME || '127.0.0.1', 'port' : 3000 }, 

Can you help me? Thanks

+6
source share
1 answer

In your application configuration, the database host does not specify your MySql container. You specify this on the local host, which is the application container. In the Compose file, you can explicitly specify a link to the db container using:

  links: - db:db 

And then your database container can be reached with the db host name. You can hard-code this host in your application configuration, because it will be the same for all environments if you use the same Compose file.

Also, if you are using the latest version of Docker, you do not need to publish ports between containers on the same Docker network, so you can remove this from your Compose file:

 ports: - "3307:3306" 

Then the db container will be available to the application container, but not externally.

+2
source

All Articles