node.js - dockerize NestJS 和 TypeORM

标签 node.js docker nestjs

我有这个 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/

相关文章:

typescript - TypeError : this. postgres.Pool 不是构造函数

node.js - 如何使用reveal.js的服务器端演讲者笔记

使用 OneLogin 实现 Node.js SAML

mysql - 如何在 sql 中使用 join 以获得所需的结果

docker - 使用 Kubernetes 和 Docker Desktop for Windows 设置持久卷

javascript - 如何增加 nest.js 应用程序中的内存堆?如何在 cli 中使用 --max-old-space-size?

javascript - Nestjs 中的模块解析

node.js - NodeJS google-translate-api BAD_REQUEST

docker - Rethinkdb SIGTERM,关闭

docker - 了解 docker stats cpu 利用率