Docker NodeJS应用程序无法连接到postgres数据库



我对docker和docker compose完全陌生。我尝试使用docker来启动一些服务,其中包含nodejs(Nest.js(api、postgresdb和pgadmin。如果没有API(nodejs(应用程序的dockerized,我可以连接到docker数据库容器,但现在我也已经对节点应用程序进行了dockerized,它不再连接,我不知道为什么。我的设置方式有什么问题吗?

这是我的docker合成文件

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"]

我的projecs根目录中有两个env文件。

  1. .env
  2. docker.env

如上所述;nftapi";服务,并通过连接到postgres容器的简单npm启动来运行nodejs。

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

使用带有docker compose的网络时,应使用服务名称作为主机名。

所以在您的情况下,主机名应该是postgres,而不是localhost

你可以在这里阅读更多关于:https://docs.docker.com/compose/networking/

最新更新