Я впервые использую sequelize, MySQL и docker и не могу получить sequelize для подключения к БД.
Я проверил наличие БД с DBeaver и могу подключиться.Я также вижу, как контейнер MySQL отвечает в терминале при подключении через DBeaver.Однако при попытке установить соединение с кодом я получаю сообщение об ошибке ECONNREFUSED.
Я проверил свой код с помощью документов sequelize и дважды проверил настройки порта, но, похоже, не вижу, в чем проблема.
После того, как правильный ответ был предоставлен ниже, я заметил, что у меня была ошибка.Я пропустил следующее из контейнера «mysql» в файле docker-compose.yml.
networks:
- app-tier
Чтобы не требовать, чтобы другие пользователи читали комментарии в ответе, чтобы обнаружить это, я добавил это кФайл docker-compose.yml, так что вопрос и ответ теперь выровнены более четко
Файл docker-compose.yml:
version: '3'
networks:
app-tier:
driver: bridge
services:
server:
image: bitnami/node
networks:
- app-tier
command: "sh -c 'npm install && npm run dev'"
volumes:
- ./server:/app
ports:
- 5000:5000
depends_on:
- mysql
mysql:
image: 'bitnami/mysql:latest'
environment:
- MYSQL_USER=root
- MYSQL_PASSWORD=password
- MYSQL_ROOT_PASSWORD=password
- MYSQL_DATABASE=school
networks:
- app-tier
ports:
- '3306:3306'
volumes:
- ./db:/bitnami/mysql/data
Последовательное соединение:
const Sequelize = require('sequelize');
const sequelize = new Sequelize('school', 'root', 'password', {
dialect: 'mysql'
});
module.exports = sequelize;
Попытка синхронизации из app.js:
sequelize.sync()
.then(result => console.log(result))
.catch(err => console.log('EEEERRRROOOOOOR',err));
Терминальный вывод:
server_1 | { SequelizeConnectionRefusedError: connect ECONNREFUSED 127.0.0.1:3306
server_1 | at Utils.Promise.tap.then.catch.err (/app/node_modules/sequelize/lib/dialects/mysql/connection-manager.js:139:19)
server_1 | at tryCatcher (/app/node_modules/bluebird/js/release/util.js:16:23)
server_1 | at Promise._settlePromiseFromHandler (/app/node_modules/bluebird/js/release/promise.js:512:31)
server_1 | at Promise._settlePromise (/app/node_modules/bluebird/js/release/promise.js:569:18)
server_1 | at Promise._settlePromise0 (/app/node_modules/bluebird/js/release/promise.js:614:10)
server_1 | at Promise._settlePromises (/app/node_modules/bluebird/js/release/promise.js:689:18)
server_1 | at Async._drainQueue (/app/node_modules/bluebird/js/release/async.js:133:16)
server_1 | at Async._drainQueues (/app/node_modules/bluebird/js/release/async.js:143:10)
server_1 | at Immediate.Async.drainQueues (/app/node_modules/bluebird/js/release/async.js:17:14)
server_1 | at runCallback (timers.js:810:20)
server_1 | at tryOnImmediate (timers.js:768:5)
server_1 | at processImmediate [as _immediateCallback] (timers.js:745:5)
server_1 | name: 'SequelizeConnectionRefusedError',
server_1 | parent:
server_1 | { Error: connect ECONNREFUSED 127.0.0.1:3306
server_1 | at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1191:14)
server_1 | errno: 'ECONNREFUSED',
server_1 | code: 'ECONNREFUSED',
server_1 | syscall: 'connect',
server_1 | address: '127.0.0.1',
server_1 | port: 3306,
server_1 | fatal: true },
server_1 | original:
server_1 | { Error: connect ECONNREFUSED 127.0.0.1:3306
server_1 | at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1191:14)
server_1 | errno: 'ECONNREFUSED',
server_1 | code: 'ECONNREFUSED',
server_1 | syscall: 'connect',
server_1 | address: '127.0.0.1',
server_1 | port: 3306,
server_1 | fatal: true } }