无法使用 typeorm 连接到 postgres
Unable to connect to postgres with typeorm
我有这个 docker-compose.infra.yaml
配置:
version: '3.1'
services:
db:
image: postgres
restart: always
ports:
- "5432:5432"
environment:
POSTGRES_PASSWORD: postgres
POSTGRES_USERNAME: postgres
networks:
default:
external:
name: learning
连同这个 docke-compose.yaml
配置:
version: '3.1'
services:
web_app:
container_name: web_app
image: node:14
entrypoint:
["/bin/sh", "-c", "yarn start:dev --preserveWatchOutput"]
working_dir: /app
volumes:
- ./:/app
ports:
- 3001:3000
networks:
default:
external:
name: learning
我将其启动为:
start.infra.sh
#!/bin/bash
docker network create learning
docker-compose -f docker-compose.infra.yaml start
start.sh
#!/bin/bash
docker network create learning
docker-compose up
make start
:
.PHONY: start
start:
@./start-infra.sh
@./start.sh
我的数据库已启动并且 运行,我可以使用 pgAdmin 使用如下凭据连接到它:
密码是postgres
。这是我的 nest.js 代码:
@Module({
imports: [
TasksModule,
TypeOrmModule.forRoot({
type: 'postgres',
host: 'localhost',
port: 5432,
username: 'postgres',
password: 'postgres',
database: 'postgres',
autoLoadEntities: true,
synchronize: true,
}),
AuthModule,
],
controllers: [],
providers: [],
})
export class AppModule {}
虽然在我看来我做的一切都正确,但我一定是遗漏了一些东西,因为我无法从代码连接到数据库。我错过了什么?
host: 'localhost',
应该是:
host: 'db',
在容器中,postgres DNS 名称与服务名称相同,db
,而不是 localhost
。默认情况下,每个容器都有自己独立的网络命名空间,包括一个私有 localhost
,它只与容器通信,不与其他容器通信,也不与您的外部主机通信。
我有这个 docker-compose.infra.yaml
配置:
version: '3.1'
services:
db:
image: postgres
restart: always
ports:
- "5432:5432"
environment:
POSTGRES_PASSWORD: postgres
POSTGRES_USERNAME: postgres
networks:
default:
external:
name: learning
连同这个 docke-compose.yaml
配置:
version: '3.1'
services:
web_app:
container_name: web_app
image: node:14
entrypoint:
["/bin/sh", "-c", "yarn start:dev --preserveWatchOutput"]
working_dir: /app
volumes:
- ./:/app
ports:
- 3001:3000
networks:
default:
external:
name: learning
我将其启动为:
start.infra.sh
#!/bin/bash
docker network create learning
docker-compose -f docker-compose.infra.yaml start
start.sh
#!/bin/bash
docker network create learning
docker-compose up
make start
:
.PHONY: start
start:
@./start-infra.sh
@./start.sh
我的数据库已启动并且 运行,我可以使用 pgAdmin 使用如下凭据连接到它:
密码是postgres
。这是我的 nest.js 代码:
@Module({
imports: [
TasksModule,
TypeOrmModule.forRoot({
type: 'postgres',
host: 'localhost',
port: 5432,
username: 'postgres',
password: 'postgres',
database: 'postgres',
autoLoadEntities: true,
synchronize: true,
}),
AuthModule,
],
controllers: [],
providers: [],
})
export class AppModule {}
虽然在我看来我做的一切都正确,但我一定是遗漏了一些东西,因为我无法从代码连接到数据库。我错过了什么?
host: 'localhost',
应该是:
host: 'db',
在容器中,postgres DNS 名称与服务名称相同,db
,而不是 localhost
。默认情况下,每个容器都有自己独立的网络命名空间,包括一个私有 localhost
,它只与容器通信,不与其他容器通信,也不与您的外部主机通信。