Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 与my Redis:6379的Redis连接失败-运行种子时getaddrinfo eNotFind_Mysql_Node.js_Docker_Redis_Sequelize.js - Fatal编程技术网

Mysql 与my Redis:6379的Redis连接失败-运行种子时getaddrinfo eNotFind

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

我正在使用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'
}
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'
  }
};