简体   繁体   中英

NodeJS + Mysql with Docker Compose 2

I´m trying to built a docker-compose file to deploy locally my NodeJS app that connects to a mysql server. I´ve tried everything ( read a lot of tutorials and some questions here in Stackoverflow ) but I keep getting the ECONNREFUSED error. This is my Dockerfile from NodeJS:

##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-compose:

 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

In your app config, the database host isn't pointing at your MySql container. You're pointing it at the local host, which is the app container. In the Compose file you can explicitly name the link to the db container using:

  links:
    - db:db  

And then your database container can be reached at the hostname db . You can hard-code that host in your app config, because it will be the same for all environments, as long as you use the same Compose file.

Also, if you're using a recent version of Docker you don't need to publish ports between containers in the same Docker network - so you can remove this from your Compose file:

ports:
  - "3307:3306"  

Then the db container will be accessible by the app container, but not externally.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM