2

我有一个 Node.js 应用程序(使用新的 NestJS)框架,在端口 3000 上运行。作为数据库,我通过 TypeORM 使用 MySQL。在本地,一切正常。我在码头化它时遇到了问题。

我的 TypeORM 配置:

{
    "type": "mysql",
    "host": "localhost",
    "port": 3306,
    "username": "root",
    "password": "root",
    "database": "nest",
    "entities": ["src/**/*.entity{.ts,.js}"],
    "synchronize": true
}

docker-compose.yml的如下:

version: "3"
services:
  db:
    image: mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: nest
      MYSQL_USER: root
      MYSQL_PASSWORD: root
    networks:
      - new
  nest:
    image: grimscythe/nest-sample
    depends_on:
      - db
    ports:
      - 3000:3000
    networks:
      - new
networks:
  new:

我一直在阅读有关此特定场景的文档,并且一切都应该可以正常工作。重击 MySQL 容器表明数据库运行良好。然而 Node 框架吐了Unable to connect to the database...。我是否遗漏了docker-compose.yml文件中的某些内容?

4

2 回答 2

10

尝试"host": "db"而不是本地主机。Docker-compose 使用服务名称作为其 DNS 条目

于 2018-05-20T18:14:37.600 回答
0

我刚刚经历过同样的事情,写下来给后面的人。

您的 typeorm 配置主机被指定为 localhost,这很好,并且对于没有 docker 容器的本地开发是必需的,但是如果您想将 typeorm 连接到 docker 容器,请使用 db 即。docker-compose 文件上的服务名称。

一个建议是"host": process.env.HOST ?? 'localhost'在安装dotenv软件包之后使用,这样您就可以使用 env 文件中的 HOST,否则使用 localhost。或者创建一个连接数组,命名为 test / production / staging 并加载适当命名的 typeorm 配置,具体取决于当时的 NODE_ENV。

请参阅 Ben Awad Youtube 视频作为一个很好的例子。

于 2022-02-06T21:33:05.017 回答