如何解决dockerize NestJS和TypeORM
我有这个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-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","entities": ["dist/**/*.entity.js"]
}
还可以查看this回购。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。