Open2

M1 mac で Docker MySQLでprismaを使うとき

qaynamqaynam

M1 macでdockerを使い、mysqlサーバーを立ち上げる場合はplatform: linux/amd64を使わないと立ち上がってくれないけど、それを指定したら、prismaが👇のようなエラーが吐かれて困った

Error: Get config: Unable to establish a connection to query-engine-node-api library

因みにNodeJSのイメージはnode:16-alpine使っていた。
1時間ほどissueを探っていたら👇を発見

https://github.com/prisma/prisma/issues/8478#issuecomment-1204233421

どうやら、alpineではなく18-slimならいけるらしい、issue通り試したら、うまく動いた。

qaynamqaynam

PrismaClientInitializationError: Can't reach database server at db:3306

それでなぜ👇のエラーが出てprismaがdb containerのnetwork aliasを認識しない。

throw new PrismaClientInitializationError(error2.message, this.config.clientVersion, error2.error_code);
                ^

PrismaClientInitializationError: Can't reach database server at `db`:`3306`

Please make sure your database server is running at `db`:`3306`.
    at startFn (/work/app/apps/api/dist/main.js:261148:17)
    at async Proxy.onModuleInit (/work/app/apps/api/dist/main.js:233752:9)
    at async Promise.all (index 0)
    at async callModuleInitHook (/work/app/apps/api/node_modules/@nestjs/core/hooks/on-module-init.hook.js:43:5)
    at async NestApplication.callInitHook (/work/app/apps/api/node_modules/@nestjs/core/nest-application-context.js:178:13)
    at async NestApplication.init (/work/app/apps/api/node_modules/@nestjs/core/nest-application.js:96:9)
    at async NestApplication.listen (/work/app/apps/api/node_modules/@nestjs/core/nest-application.js:154:33)
    at async bootstrap (/work/app/apps/api/dist/main.js:194:5) {
  clientVersion: '4.5.0',
  errorCode: 'P1001'
}

cat /etc/hostsしてみたら、そこにはdbのアドレスがなかった、原因はよくわからないが、うまいことcontainerがlinkされてないと思う。

127.0.0.1	localhost
::1	localhost ip6-localhost ip6-loopback
fe00::0	ip6-localnet
ff00::0	ip6-mcastprefix
ff02::1	ip6-allnodes
ff02::2	ip6-allrouters
172.28.1.2	17303ee8b44a

仕方ないので、ipをdocker networkを作成し、固定IPを指定することにした。

#省略

services:
  app:
    # 省略
  networks:
      app-network:
    extra_hosts:
      - 'db:172.28.1.5'

networks:
  app-network:
    driver: bridge
    ipam:
      config:
        - subnet: 172.28.1.0/24

これでコンテナー再起動すると👇

127.0.0.1	localhost
::1	localhost ip6-localhost ip6-loopback
fe00::0	ip6-localnet
ff00::0	ip6-mcastprefix
ff02::1	ip6-allnodes
ff02::2	ip6-allrouters
172.28.1.5	db <-👈追加されている
172.28.1.2	17303ee8b44a