【发布时间】:2022-01-11 20:40:45
【问题描述】:
我对 docker 和 docker-compose 还很陌生。我尝试使用包含 nodejs (Nest.js) api、postgres db 和 pgadmin 的 docker 启动一些服务。如果没有对 API(nodejs)应用程序进行 docker 化,我可以连接到 docker 数据库容器,但是现在我也已经对节点应用程序进行了 docker 化,它不再连接,我不知道为什么。我的设置方式有什么问题吗?
这是我的 docker-compose 文件
version: "3"
services:
nftapi:
env_file:
- .env
build:
context: .
ports:
- '5000:5000'
depends_on:
- postgres
volumes:
- .:/app
- /app/node_modules
networks:
- postgres
postgres:
container_name: postgres
image: postgres:latest
ports:
- "5432:5432"
volumes:
- /data/postgres:/data/postgres
env_file:
- docker.env
networks:
- postgres
pgadmin:
links:
- postgres:postgres
container_name: pgadmin
image: dpage/pgadmin4
ports:
- "8080:80"
volumes:
- /data/pgadmin:/root/.pgadmin
env_file:
- docker.env
networks:
- postgres
networks:
postgres:
driver: bridge
这是成功构建的 nodejs 应用程序 Dockerfile,在日志中我看到该应用程序正在尝试连接到数据库,但它无法(没有特定错误)只是找不到数据库。
# Image source
FROM node:14-alpine
# Docker working directory
WORKDIR /app
# Copying file into APP directory of docker
COPY ./package.json /app/
RUN apk update && \
apk add git
# Then install the NPM module
RUN yarn install
# Copy current directory to APP folder
COPY . /app/
EXPOSE 5000
CMD ["npm", "run", "start:dev"]
我的项目根目录中有 2 个 env 文件。
- .env
- docker.env
如上所述,当我从 docker 中删除“nftapi”服务并使用简单的 npm start 运行 nodejs 时,它正在连接到 postgres 容器。
TypeOrmModule.forRoot({
type: 'postgres',
host: process.env.POSTGRES_HOST,
port: Number(process.env.POSTGRES_PORT),
username: process.env.POSTGRES_USER,
password: process.env.POSTGRES_PASSWORD,
database: process.env.POSTGRES_DB,
synchronize:true,
entities: ['dist/**/*.entity{.ts,.js}'],
}),
在 typeorm 模块中使用的 .env 文件中的主机是 localhost
【问题讨论】:
-
你给什么地址连接postgres?
-
我编辑了最初的帖子,包括它现在尝试连接的方式
-
好的,但是 POSTGRES_HOST 的值是多少?
-
它只是 .env 文件中的“localhost”,所以没有引号
-
必须是'postgres'
标签: node.js postgresql docker nestjs