Summary
I am running a Sveltkit (JS Framework) application with Prisma (ORM) which connects to PlanetScale (MySQL cloud database) without issue. When I run it in docker the application installs and runs but cannot connect to PlanetScale. How would I allow Docker to connect to PlanetScale?
Error
Failed to get with error Invalid
prisma.category.findMany()invocation: Can't reach database server ataws-eu-west-2.connect.psdb.cloud:3306Please make sure your database server is running ataws-eu-west-2.connect.psdb.cloud:3306.
I have confirmed the docker can connect to the internet but just has trouble connecting to PlanetScale database.
Code
MySQL Connection URI
Password is starred out but is correct in my .env file
DATABASE_URL='mysql://7m9rl9ecwydgs7d2oobp:********@aws-eu-west-2.connect.psdb.cloud/blog-database?sslaccept=strict'
Prisma
schema.prisma
generator client {
provider = "prisma-client-js"
previewFeatures = ["referentialIntegrity"]
}
datasource db {
provider = "mysql"
url = env("DATABASE_URL")
referentialIntegrity = "prisma"
}
prisma.ts
Helper functions
import { PrismaClient, type PrismaPromise, type Category } from '@prisma/client'
const prisma = new PrismaClient()
export function findAllCategory(): Promise<Array<Category>> {
return prisma.category.findMany()
}
Docker
DockerFile
FROM node:18-alpine3.15 AS builder
WORKDIR /app
COPY package.json package-lock.json ./
RUN npm ci
COPY . .
RUN npx prisma generate
RUN npm run build && npm prune --production
FROM node:18-alpine3.15
USER node:node
WORKDIR /app
COPY --from=builder --chown=node:node /app/build ./build
COPY --from=builder --chown=node:node /app/node_modules ./node_modules
COPY --chown=node:node prisma .
COPY --chown=node:node package.json .
COPY --chown=node:node .env .
ENV PORT 5050
EXPOSE 5050
CMD ["node", "build"]
Docker Commands
docker build . -t sveltekit:alpine
docker run -d -p 5050:5050 --name sveltekit-app sveltekit:alpine
Docker runs without issue but the error is displayed when going to http://localhost:5050