Home > Mobile >  Nodejs Container Cant Access to Mysql Container
Nodejs Container Cant Access to Mysql Container

Time:03-16

I create a app that uses mysql database but When I Dockerize My Services I cant Access to my containers from each other even i create a same network and put my service name in my database config here is my docker compose and database config

version: "3.8"
services:
  db:
    container_name: mydb
    image: mysql:latest
    restart: unless-stopped
    cap_add:
      - SYS_NICE
    environment:
      - MYSQL_ROOT_PASSWORD=12345678
      - MYSQL_DATABASE=something
      - MYSQL_USER=something
      - MYSQL_PASSWORD=12345678
    volumes:
      - db:/var/lib/mysql
    network_mode: "host"
  nodeserver:
    depends_on:
      - db
    build:
      context: ./app
    network_mode: "host" 
volumes:
  db:

# pull the Node.js Docker image
FROM node:alpine

# create the directory inside the container
WORKDIR /usr/src/app

# copy the package.json files from local machine to the workdir in container
COPY package*.json ./

# run npm install in our local machine
RUN npm install

# copy the generated modules and all other files to the container
COPY . .

# our app is running on port 5000 within the container, so need to expose it
EXPOSE 5000
# the command that starts our app
CMD ["node", "server.js"]
erver_1  | ConnectionRefusedError [SequelizeConnectionRefusedError]: connect ECONNREFUSED 127.0.0.1:3306
nodeserver_1  |     at ConnectionManager.connect (/usr/src/app/node_modules/sequelize/dist/lib/dialects/mysql/connection-manager.js:92:17)        
nodeserver_1  |     at processTicksAndRejections (node:internal/process/task_queues:96:5)
nodeserver_1  |     at async ConnectionManager._connect (/usr/src/app/node_modules/sequelize/dist/lib/dialects/abstract/connection-manager.js:216:24)
nodeserver_1  |     at async /usr/src/app/node_modules/sequelize/dist/lib/dialects/abstract/connection-manager.js:174:32
nodeserver_1  |     at async ConnectionManager.getConnection (/usr/src/app/node_modules/sequelize/dist/lib/dialects/abstract/connection-manager.js:197:7)
nodeserver_1  |     at async /usr/src/app/node_modules/sequelize/dist/lib/sequelize.js:303:26
nodeserver_1  |     at async MySQLQueryInterface.createTable (/usr/src/app/node_modules/sequelize/dist/lib/dialects/abstract/query-interface.js:94:12)
nodeserver_1  |     at async Function.sync (/usr/src/app/node_modules/sequelize/dist/lib/model.js:913:5)
nodeserver_1  |     at async Sequelize.sync (/usr/src/app/node_modules/sequelize/dist/lib/sequelize.js:377:9)
nodeserver_1  |     at async initialize (/usr/src/app/_helpers/db.js:36:5) {
nodeserver_1  |   parent: Error: connect ECONNREFUSED 127.0.0.1:3306
nodeserver_1  |       at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1187:16) {
nodeserver_1  |     errno: -111,
nodeserver_1  |     code: 'ECONNREFUSED',
nodeserver_1  |     syscall: 'connect',
nodeserver_1  |     address: '127.0.0.1',
nodeserver_1  |     port: 3306,
nodeserver_1  |     fatal: true
nodeserver_1  |   },
nodeserver_1  |   original: Error: connect ECONNREFUSED 127.0.0.1:3306
nodeserver_1  |       at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1187:16) {
nodeserver_1  |     errno: -111,
nodeserver_1  |     code: 'ECONNREFUSED',
nodeserver_1  |     syscall: 'connect',
nodeserver_1  |     address: '127.0.0.1',
nodeserver_1  |     port: 3306,
nodeserver_1  |     fatal: true
nodeserver_1  |   }

enter image description here

enter image description here enter image description here

after run my projects with docker-compose up i got this error enter image description here

CodePudding user response:

The error is caused by not providing the hostname into the Sequelize options and it defaults to localhost if you don't. You need to do something like the following:

new Sequelize(database, user, password, { dialect: 'mysql', host })

Reference (see Option #3): https://sequelize.org/master/manual/getting-started.html#connecting-to-a-database

  • Related