Node.js TypeORM CLI无法通过docker compose识别postgres主机

Node.js TypeORM CLI无法通过docker compose识别postgres主机,node.js,postgresql,docker,typeorm,Node.js,Postgresql,Docker,Typeorm,我正在nodejs中创建一个应用程序,带有typescript、postgres和typeorm,为了帮助我的开发,我将这些都从docker开始。我正在使用网络“网桥”,容器之间的连接正常。问题是当我想使用TypeORM CLI运行迁移时。CLI根本无法识别在my ormconfig.json中设置为“postgres”的主机。有趣的是,当我将ormconfig.json上的主机更改为“localhost”时,CLI可以正常工作,但我失去了与数据库的连接,当我将主机设置为“postgres”时,

我正在nodejs中创建一个应用程序,带有typescript、postgres和typeorm,为了帮助我的开发,我将这些都从docker开始。我正在使用网络“网桥”,容器之间的连接正常。问题是当我想使用TypeORM CLI运行迁移时。CLI根本无法识别在my ormconfig.json中设置为“postgres”的主机。有趣的是,当我将ormconfig.json上的主机更改为“localhost”时,CLI可以正常工作,但我失去了与数据库的连接,当我将主机设置为“postgres”时,与数据库的连接可以正常工作,但运行迁移的CLI不能正常工作

这是尝试运行迁移时出现的TypeORM CLI错误:

yarn typeorm migration:run
yarn run v1.22.0
$ ts-node-dev ./node_modules/typeorm/cli.js migration:run
Using ts-node version 8.10.2, typescript version 3.9.7
Error during migration run:
Error: getaddrinfo ENOTFOUND postgres
    at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:64:26) {
  errno: 'ENOTFOUND',
  code: 'ENOTFOUND',
  syscall: 'getaddrinfo',
  hostname: 'postgres'
}
error Command failed with exit code 1.
docker-compose.yml:

version: '3.7'

services:
  api_cadunico:
    container_name: api_cadunico
    build:
      context: .
      target: development
    command: yarn start:dev
    restart: unless-stopped
    volumes:
      - .:/usr/src/app
      - /usr/src/app/node_modules
    env_file:
      - .env
    ports:
      - 3333:3333
    networks:
      - connection_cadunico
    depends_on:
      - postgres
  postgres:
    container_name: postgres
    image: postgres:12
    volumes:
      - pgdata:/var/lib/postgresql/data
    environment:
      TZ: America/Fortaleza
      POSTGRES_DB: ${DATABASE_NAME}
      POSTGRES_USER: ${DATABASE_USER}
      POSTGRES_PASSWORD: ${DATABASE_PASSWORD}
      PG_DATA: /var/lib/postgresql/data
    ports:
      - 5432:5432
    networks:
      - connection_cadunico
networks:
  connection_cadunico:
    driver: bridge
volumes:
  pgdata:
ormconfig.json:

[
  {
    "name": "default",
    "type": "postgres",
    "host": "postgres",
    "port": 5432,
    "username": "postgres",
    "password": "cadunico",
    "database": "cadunico_atendimento",
    "entities": [
      "./src/entities/*.ts"
    ],
    "migrations": [
      "./src/database/migrations/*.ts"
    ],
    "cli": {
      "migrationsDir": "./src/database/migrations"
    }
  }
]

我需要做些什么才能运行迁移,而不必将主机更改为本地主机并正常使用docker的网络主机?

嗯,这有点晚了。对于任何想找到这个问题答案的人来说,您必须在应用程序的容器中运行所有typerm命令,方法是使用
docker exec-it-your container name或id sh
访问它

如果您使用的是typescript,则需要将
ts node
作为devDependency,并使用
/node\u modules/.bin/ts node-r tsconfig path/register./node\u modules/typeorm/CLI.js运行typeorm的CLI

以下是一些有用的资源: