Closed7

NestJS x PrismaをDockerで動かす際にハマったこと

yuyake0084yuyake0084

各種パッケージバージョン

パッケージ バージョン
prisma 4.1.1
@prisma/client 4.1.1
@nestjs/apollo 10.0.19
@nestjs/cli 9.0.0
@nestjs/common 9.0.0
yuyake0084yuyake0084

Persisted queries are enabled and are using an unbounded cache. Your server is vulnerable to denial of service attacks via memory exhaustion. Set cache: "bounded" or persistedQueries: false in your ApolloServer constructor, or see https://go.apollo.dev/s/cache-backends for other alternatives.

続いてのエラー。
無事containerの立ち上げだけはできたものの、表題のエラーに怒られる。

内容としては、 GraphQLModule.forRootcache: "bounded" を定義しなさいとのことなので、仰せの通りに。

yuyake0084yuyake0084

The "@nestjs/graphql" plugin is not compatible with Nest CLI. Neither "after()" nor "before()" nor "afterDeclarations()" function have been provided.

次なるエラー。
nest build を実行した際に発生。
どうやら nest start でも出る模様。

解決策

策というほどでもないが、node_modulesを消して yarn install しなおしたら発生しなくなった。

yuyake0084yuyake0084

Error: P1001: Can't reach database server at localhost:3306

DBに接続しようとした時に出てくるエラー。

解決策

docker-composeで同一のnetworkを参照するようにして、DBのホストの環境変数を localhost からDBのサービス名へ変更。

docker-compose.yml
services:
  db:
    ...
    networks:
      - backend

  api:
    ...
    depends_on:
      db:
        condition: service_started
    networks:
      - backend

networks:
  backend:
.env
- DB_HOST=localhost
+ DB_HOST=db
yuyake0084yuyake0084

TypeError: collection is not iterable

prisma generate 実行時に出たエラー。

解決策

めちゃくちゃハマってしまったのだが、NestJSのサービス側のvolumeに /app/node_modules を付与することで解決。

api:
  volume:
     - .:/app
     - /app/node_modules
yuyake0084yuyake0084

無事 docker-compose up でWebからアクセスできたので、クローズ。

このスクラップは2022/08/12にクローズされました