Automatically create SQLite database and run Prisma migrations in Docker for Next.js app
I have a Dockerfile that builds a Next.js application using Prisma with a SQLite database. I'd like to know if there's a recommended or automated way to create the SQLite database file and run the necessary Prisma migrations directly inside the Docker container, before the Next.js app starts. What's the best practice to achieve this setup?
Solution:Jump to solution
Hey π
The most common approach is to run Prisma migrations as part of your application startup process. You can modify your Docker container's startup command to run migrations before starting the Next.js application.
You can create a custom startup script or modify your package.json to run migrations before starting the application:...
3 Replies
You chose to debug with a human. They'll tinker with your query soon. If you get curious meanwhile, hop into
#ask-ai
for a quick spin!Solution
Hey π
The most common approach is to run Prisma migrations as part of your application startup process. You can modify your Docker container's startup command to run migrations before starting the Next.js application.
You can create a custom startup script or modify your package.json to run migrations before starting the application:
Then you can use this script in your Dockerfile's CMD:
For SQLite specifically, you don't need to explicitly create the database file. When Prisma connects to a SQLite database, it automatically creates the file if it doesn't exist.
Hey! π
Sorry for the delayed response, and thank you so much for your detailed replyβit really helped me understand how to set things up correctly!
In the end, I opted for a similar solution, using a specific entrypoint file in the Dockerfile. Here's how I implemented it:
In the Dockerfile:
And here's the content of the
entrypoint.sh
file:
Two quick tips based on my experience:
- Carefully check the location of your entrypoint.sh
file.
- Always add #!/bin/sh
at the beginning of your entrypoint script because bash may not work correctly inside Alpine Docker images (so you need to use sh
).
Thanks again for your valuable help! ππ