Postgres in docker ;每次启动容器时重新加载数据库/初始化脚本



在正式的postgres docker镜像之后,你可以设置一个入口点来放置你的初始化脚本。

这工作正常。对于开发/测试,我希望每个容器启动都有一个干净的数据库,而不仅仅是第一次。
docker-entrypoint-initdb.d中的所有脚本仅运行一次(首次启动容器时(。
有没有一种简单的方法可以在每次通过docker-compose启动容器时执行脚本?
我把DROP TABLE IF EXISTS放在每个CREATE TABLE前面,所以.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 rm -vs postgres-myname
docker volume prune -f --filter label=protgres-myname
docker-compose up -d

我建议先探索docker volume prune,然后再在脚本中使用它。

我还建议将命名卷映射到 postgres 数据目录 (/var/lib/postgresql/data(,并显式删除该卷而不是修剪。

# docker-compose.override.yml
postgres-myname:
volumes:
- pgdata:/var/lib/postgresql/data
volumes:
- pgdata

然后

docker volume rm -f "$(basename "`/bin/pwd`")_pgdata"

最新更新