skip to Main Content

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

2

Answers


  1. 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

    Login or Signup to reply.
  2. This worked for me.  I added the "host" entry in the <sequelize>.yaml file.
    
    Content of my <sequelize.yaml> file: 
    
    dbname: <abc123>
    username: <abc123>
    password: <abc123>
    maxPasswordHistory: 6
    #forcesync: true
    params:
      dialect: postgres
      host: <abc123>                    <<<<<this was the problem. 
      logging: false
    
    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search