Mysql 与my Redis:6379的Redis连接失败-运行种子时getaddrinfo eNotFind
我正在使用Docker进行集装箱服务 我创建了一个种子文件,并通过Mysql 与my Redis:6379的Redis连接失败-运行种子时getaddrinfo eNotFind,mysql,node.js,docker,redis,sequelize.js,Mysql,Node.js,Docker,Redis,Sequelize.js,我正在使用Docker进行集装箱服务 我创建了一个种子文件,并通过npx sequelize cli db:seed:all运行它,然后出现错误: Sequelize CLI [Node: 13.12.0, CLI: 6.2.0, ORM: 6.5.1] Loaded configuration file "migrations/config.js". Using environment "development". events.js:292
npx sequelize cli db:seed:all运行它,然后出现错误:
Sequelize CLI [Node: 13.12.0, CLI: 6.2.0, ORM: 6.5.1]
Loaded configuration file "migrations/config.js".
Using environment "development".
events.js:292
throw er; // Unhandled 'error' event
^
Error: Redis connection to my-redis:6379 failed - getaddrinfo ENOTFOUND my-redis
at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:66:26)
Emitted 'error' event on RedisClient instance at:
at RedisClient.on_error (/Users/CCCC/Desktop/Source Tree/my-server/node_modules/redis/index.js:342:14)
at Socket.<anonymous> (/Users/CCCC/Desktop/Source Tree/my-server/node_modules/redis/index.js:223:14)
at Socket.emit (events.js:315:20)
at Socket.EventEmitter.emit (domain.js:485:12)
at emitErrorNT (internal/streams/destroy.js:84:8)
at processTicksAndRejections (internal/process/task_queues.js:84:21) {
errno: -3008,
code: 'ENOTFOUND',
syscall: 'getaddrinfo',
hostname: 'my-redis'
}
docker-compose.yml
version: '2.1'
services:
my-db:
image: mysql:5.7
...
ports:
- 3306:3306
my-redis:
image: redis:6
ports:
- 6379:6379
my-web:
restart: always
environment:
- NODE_ENV=dev
- PORT=3030
build: .
command: >
sh -c "npm install && ./wait-for-db-redis.sh my-db my-redis npm run dev"
ports:
- "3030:3030"
volumes:
- ./:/server
depends_on:
- my-db
- my-redis
.后遗症
const path = require('path');
module.exports = {
'config': path.resolve('migrations/config.js'),
'seeders-path': path.resolve('migrations/seeders'),
'models-path': path.resolve('migrations/models.js')
};
迁移/model.js
const Sequelize = require('sequelize');
const app = require('../src/app');
const sequelize = app.get('sequelizeClient');
const models = sequelize.models;
module.exports = Object.assign({
Sequelize,
sequelize
}, models);
config.js
const app = require('../src/app');
const env = process.env.NODE_ENV || 'development';
const dialect = 'mysql';
module.exports = {
[env]: {
dialect,
url: app.get(dialect),
migrationStorageTableName: '_migrations'
}
};
您是在应用程序的Docker Compose容器中运行迁移,还是在Docker主机上运行迁移
从主机的角度来看,没有像myredis
这样的主机名(它只是Docker覆盖网络中的一个东西,其中包含容器)
因为您已经将Redis端口6379公开给您的主机(事实上是整个世界),所以您应该在主机上使用localhost:6379
。我正在我的项目文件夹上运行它。我应该如何修复它?您需要在应用程序容器中运行该命令。请参阅我运行docker compose exec my web sh
,然后运行npx sequelize cli db:seed:all
。它起作用了!由于主机开发环境和docker部署环境具有不同的可用主机名,因此您需要确保诸如Redis位置之类的内容是可配置的,可能需要使用环境变量。
const app = require('../src/app');
const env = process.env.NODE_ENV || 'development';
const dialect = 'mysql';
module.exports = {
[env]: {
dialect,
url: app.get(dialect),
migrationStorageTableName: '_migrations'
}
};