根据官方的postgres docker镜像,您可以设置一个入口点,将初始化脚本放在其中。这个方法很好用。对于开发/测试,我想在每次容器启动时都有一个干净的数据库,而不仅仅是第一次启动时。
docker-entrypoint-initdb.d
中的所有脚本仅运行一次(容器第一次启动时)。有没有一种简单的方法通过docker-compose
每次启动容器都执行脚本?我在每个CREATE TABLE
之前加上了DROP TABLE IF EXISTS
,因此即使在新的启动时也可以使用.sql
脚本。若需要,以下是docker-compose的相关部分:postgres-myname:
image: postgres:12.1-alpine
environment:
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=postgres
- POSTGRES_DB=postgres-db
ports:
- "54320:5432"
build:
context: .
dockerfile: postgresql-config/Dockerfile
networks:
- my-network
docker-compose down -v
,Compose 将清理一切,包括数据库的本地状态,然后当你再次运行up
时,它将从一个干净的状态开始。我认为没有办法指定你实际上并不关心默认卷。 - David Maze