node.js - TypeORM 迁移 :run not working errno: -3008, getaddrinfo ENOTFOUND

标签 node.js docker docker-compose typeorm

你知道为什么当我尝试运行 typeorm:run 来执行迁移时会出现以下错误吗?

node --require ts-node/register ./node_modules/typeorm/cli.js migration:run
Error during migration run:
Error: getaddrinfo ENOTFOUND users-service-db
at GetAddrInfoReqWrap.onlookup [as oncomplete] (node:dns:69:26) {
errno: -3008,
code: 'ENOTFOUND',
syscall: 'getaddrinfo',
hostname: 'users-service-db',
fatal: true
 }
error Command failed with exit code 1.

我的配置是

users-service-db:
   environment:
     - MYSQL_ROOT_PASSWORD=password
     - MYSQL_DATABASE=db
   image: mysql:5.7.20
   ports:
     - "7201:3306"

users-service-db is running does this Error: getaddrinfo ENOTFOUND users-service-db 表示主机不知道要做什么。你能帮忙吗?

在尝试答案 1 和 2 后仍然出现相同的错误不知道该怎么做它以前有效吗?

version: "3"
services:
  api-gateway:
    build:
      context: "."
      dockerfile: "./api-gateway/Dockerfile"
    depends_on:
      - chat-service
      - users-service
    ports:
      - "7000:7000"
    volumes:
      - ./api-gateway:/opt/app

  chat-service:
    build:
      context: "."
      dockerfile: "./chat-service/Dockerfile"
    depends_on:
      - chat-service-db
    ports:
      - "7100:7100"
    volumes:
      - ./chat-service:/opt/app

  chat-service-db:
    environment:
      - MYSQL_ROOT_PASSWORD=password
      - MYSQL_DATABASE=db
    image: mysql:5.7.20
    ports:
      - "7200:3306"

  phpmyadmin:
    image: phpmyadmin/phpmyadmin
    ports:
      - "7300:80"
    volumes:
      - ./phpmyadmin/config.user.inc.php:/etc/phpmyadmin/config.user.inc.php

  users-service:
    build:
      context: "."
      dockerfile: "./users-service/Dockerfile"
    depends_on:
      - users-service-db
    ports:
      - "7101:7101"
    volumes:
      - ./users-service:/opt/app

  users-service-db:
    environment:
      - MYSQL_ROOT_PASSWORD=password
      - MYSQL_DATABASE=db
    image: mysql:5.7.20
    ports:
      - "7201:3306"
    hostname: 'localhost'

终于感谢@Eranga Heshan 我解决了错误

我在粘贴时创建了一个额外的 ormConfig.js 文件:

export = {
  "type": "mysql",
  "host": "localhost",
  "port": 7201,
  "username": "root",
  "password": "password",
  "database": "db",
  "synchronize": true,
  "logging": false,
  "entities": [
  "src/entities/**/*.ts"
  ],
  "migrations": [
  "./src/db/migrations/**/*.ts"
  ],
  "cli": {
  "entitiesDir": "src/db/entities",
  "migrationsDir": "src/db/migrations"
  }
 }

然后

node --require ts-node/register ./node_modules/typeorm/cli.js migration:run --config src/db/migrations/ormConfig

最佳答案

您的 VS Code 终端正在您的机器内运行。所以它无法解析 users-service-db 主机。

您可以通过两种方式做到这一点。

1。使用新的配置文件并从您的 localhost

执行迁移
  • 创建一个新的 typeorm 连接配置文件 migrationsOrmConfig.ts 并将其放入您的项目中(假设您将其放入 src/migrations 目录中)

    export = {
      host: 'localhost',
      port: '7201',
      type: 'mysql',
      user : 'root',
      password : 'password',
      database : 'db' ,
    };
    
  • 现在您可以修改之前用于运行迁移的命令

    node --require ts-node/register ./node_modules/typeorm/cli.js migration:run --config src/migrations/migrationsOrmConfig
    

2。从容器内的终端执行迁移

  • 在你的 VSCode 终端类型中

    docker ps -a
    
  • 获取user-serviceCONTAINER ID(假设是CONTAINER_ID)

  • 在容器内打开一个终端

    docker exec -it CONTAINER_ID /bin/bash
    
  • 执行您之前使用的命令来运行迁移(如果以下命令提示未找到 typeorm Node 模块,您可以将其安装在容器中)

    node --require ts-node/register ./node_modules/typeorm/cli.js migration:run
    

关于node.js - TypeORM 迁移 :run not working errno: -3008, getaddrinfo ENOTFOUND,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67453800/

相关文章:

node.js - node-expat@2.3.17 安装脚本失败 - 任何 NPM 安装都会发生

javascript - 制作实时聊天 php 的最佳方法?

javascript - 使用 POST (AWS4) 和获取的基于 AWS S3 浏览器的上传

node.js - Electron —加载SVG(作为标记)

postgresql - Docker:无法从 Dockerfile 运行 psql 命令

linux - Jenkins 在远程 docker 代理中运行 sh 卡住

docker - 如何在gitlab CI中的docker-in-docker(dind)中设置代理

node.js - Docker-compose 和 pm2 - 过滤日志消息的方法?

linux - 防止 Docker Compose 创建单独的网络

elasticsearch - 如何在 docker 容器中的 elasticsearch.yml 中进行简单编辑?