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