Issue
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 | }
after run my projects with docker-compose up
i got this error
Solution
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
Answered By – ionizer
Answer Checked By – Candace Johnson (BugsFixing Volunteer)