mysql - Redis 连接到 my-redis:6379 失败 - 运行种子时 getaddrinfo ENOTFOUND
问题描述
我将 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
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'
}
似乎表明我的 redis 在端口 6379 中未找到/未运行。
然后我运行docker ps
,它显示my-redis
在端口 6379 中运行。
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
...
f637ee218d03 redis:6 "docker-entrypoint.s…" 18 minutes ago Up 18 minutes 0.0.0.0:6379->6379/tcp my-server_my-redis_1
码头工人-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
.sequelizerc
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);
配置.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 主机上运行迁移?
从主机的角度来看,没有这样的主机名my-redis
(它只是一个包含该容器的 Docker 覆盖网络中的东西)。
由于您已将 Redis 端口 6379 暴露给您的主机(实际上是整个世界),您将localhost:6379
在主机上使用。
推荐阅读
- kotlin - Kotlin Unsafe and Safe cast 运算符
- python - 在 Python 中合并深层 JSON 文件
- gradle - Gradle:将一个特定文件从主项目目录复制到 subproject/build/libs
- postgresql - 如何检查我的数据库中是否启用了约束排除?
- node.js - 带有nodeJS的firebase存储中的CSV文件
- image-processing - 光场图像中的视差图不仅是基于立体的视觉,而且是多视图
- javascript - 当我尝试在字段末尾添加索引时为什么会得到 NAN?
- plotly.js - Plotly.js scattergl 不显示图形本身
- java - 使用自建插件在android native中访问Flutter Activity的DecorView
- ios - 如何在下拉菜单中使用多项选择?