我对码头和码头写作都很陌生。我试图使用包含nodejs (Nest.js) api、postgres和pgadmin的docker来划分一些服务。如果没有API (nodejs)应用程序进行对接,我可以连接到对接者数据库容器,但是现在我已经对节点应用进行了文档化,它不再连接了,我也不知道为什么。我设置的方式有什么问题吗?
这是我的码头-撰写文件
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,它成功地构建,在我看到的日志中,应用程序试图连接到数据库,但是它不能(没有特定的错误)只是找不到db。
# 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"]
我的项目根目录中有两个env文件。
如前所述,当我从docker中删除"nftapi“服务并使用一个简单的postgres运行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。
发布于 2022-01-11 12:40:45
当使用带有docker的网络时,您应该使用服务的名称作为您的主机名。
因此,在您的示例中,主机名应该是postgres
而不是localhost
您可以在这里阅读更多关于:https://docs.docker.com/compose/networking/的内容。
https://stackoverflow.com/questions/70665871
复制相似问题