Nestjs Typeorm + Postgres Docker Compose 似乎不起作用



我有一个Nestjs API+TypeORM,带有活动的PostgreSQL连接。我目前正在尝试对整个api进行码头化。

Dockerfile:

ENV DIR=/home/node/app
RUN mkdir -p ${DIR}
WORKDIR ${DIR}
COPY package*.json ./
RUN npm install
RUN npm install -g @nestjs/cli
RUN npm run build
COPY . .
EXPOSE 3000
CMD ["node", "dist/main.js"]

类型配置:

require('dotenv').config()
@Module({
imports: [
TypeOrmModule.forRoot({
type: "postgres",
host: process.env.DB_HOST,
username: process.env.DB_USER,
password: process.env.DB_PASSWORD,
port: 5432,
database: "postgres",
entities: ["dist/**/*.entity{.ts,.js}"],
synchronize: false }),

.env文件:

DB_HOST=postgres
DB_PORT=5432
DB_USER=postgres
DB_PASSWORD=test

docker-compose.yaml文件:

version: "3.9"
services:
middleware:
build: .
container_name: "middleware"
ports:
- "3000:3000"
depends_on:
- postgres
env_file:
- .env
postgres:
image: "postgres:12"
restart: always
container_name: "postgres"
environment:
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=${DB_PASSWORD}
- POSTGRES_DB=postgres
ports:
- "5433:5432"
volumes:
- api:/var/lib/postgresql/data
- ./src/migs/001_create.sql:/docker-entrypoint-initdb.d/001_create.sql
volumes:
api:

我还有一个.sql文件,它创建了第一个表并用数据填充它们,但我想这与我的问题无关。据我所见,问题似乎出在.env文件上,但我不明白我做错了什么?我正在访问postgres主机,它也是运行容器的名称,我不认为问题出在这里。

我可以通过从外部访问postgres容器winpty docker exec -it postgres psql -U postgres -h postgres postgres

表已成功创建,必须与.env文件有关。api的控制台输出为:

Unable to connect to the database. Retrying (8)...
error: no PostgreSQL user name specified in startup packet

欢迎任何帮助!提前感谢!附言:我在stackoverflow中发现了类似的话题,但似乎并没有解决我的问题。如果我错过了一个已经回答过的话题,请给我指一下。

将postgres的所有环境变量放入.env文件

POSTGRES_USER=postgres
POSTGRES_PASSWORD=postgres
POSTGRES_DB=postgres

然后告诉dockercompose为postgres容器使用.env文件就解决了这个问题。

清除您的卷并再次运行docker compose

最新更新