我對 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
uj5u.com熱心網友回復:
使用帶有 docker-compose 的網路時,您應該使用服務的名稱作為主機名。
所以在你的情況下,主機名應該是postgres而不是localhost
您可以在此處閱讀更多資訊:https : //docs.docker.com/compose/networking/
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/408290.html
標籤:
