我有这个 Dockerfile :
FROM node:12
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install
COPY . .
CMD [ "npm", "start"]
和 docker-compose.yml 看起来像这样:version: '3.1'
services:
db:
image: postgres
restart: always
volumes:
- ./db-data:/var/lib/postgresql/data
environment:
POSTGRES_PASSWORD: root
ports:
- 5432:5432
node:
build: .
volumes:
- ./public/storage/files:/usr/app/public/storage/files
env_file: .env
restart: always
ports:
- '8080:8080'
当项目启动时,它使用 ormconfig.json
{
"type": "postgres",
"host": "localhost",
"port": 5432,
"username": "postgres",
"database": "postgres",
"password": "root",
"synchronize": true,
"logging": true,
"entities": ["dist/**/*.entity.js"]
}
但是在docker中运行它时我有错误[Nest] 30 - 08/19/2020, 5:49:39 PM [TypeOrmModule] Unable to connect to the database. Retrying (4)... +3003ms
node_1 | Error: connect ECONNREFUSED 127.0.0.1:5432
请帮助修复它。没有 docker,它可以完美运行。
最佳答案
因为当您使用 docker-compose 时,它们彼此不在本地主机中。
实际上它们位于不同的 docker 网络中
所以你必须将他们的网络设置为同一个网络或通过他们的container_name
调用他们
{
"type": "postgres",
"host": "db", // container name
"port": 5432,
"username": "postgres",
"database": "postgres",
"password": "root",
"synchronize": true,
"logging": true,
"entities": ["dist/**/*.entity.js"]
}
一个工作示例如下所示:另请注意,正如@Charles Desbiens 在评论中所说,没有必要手动进行网络连接
version: "3.5"
services:
# Databases # #
postgresql-test:
container_name: postgresql-test
image: postgres:11.2-alpine
environment:
POSTGRES_USER: ${POSTGRES_USER:-admin}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-changeme}
POSTGRES_DB: ${POSTGRES_DB:-crud-node}
PGDATA: /data/postgres
ports:
- 30001:5432
networks:
- test
...
node:
build:
context: ./backend
dockerfile: Dockerfile.dev
image: backend:latest
container_name: backend
depends_on:
- postgresql-test
networks:
- test
ports:
- 3000:3000
- 9229:9229
...
networks:
test:
现在您可以使用 address: postgresql-test & port: 5432
访问您的 db
在你的代码里面{
"type": "postgres",
"host": "postgresql-test",
"port": 5432,
"username": "admin",
"database": "crud-node",
"password": "changeme",
"synchronize": true,
"logging": true,
"entities": ["dist/**/*.entity.js"]
}
你也可以看看this repo 。
关于node.js - dockerize NestJS 和 TypeORM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63492744/