如何强制 postgres docker 容器从新数据库开始

Posted

技术标签:

【中文标题】如何强制 postgres docker 容器从新数据库开始【英文标题】:How to force postgres docker container to start with new DB 【发布时间】:2018-08-02 15:29:39 【问题描述】:

我有一个 docker compose 文件,看起来像:

版本:“3” 服务: 雷迪斯: 图片:'redis:3.2.7' # 命令:redis-server --requirepass redispass postgres: 图片:postgres:9.6 端口: - “5432:5432” 环境: - POSTGRES_USER=气流 - POSTGRES_PASSWORD=气流 - POSTGRES_DB=气流 # - PGDATA=/var/lib/postgresql/data 网络服务器: 图片:气流:发展 取决于: - postgres 端口: - “8080:8080” 命令: - 网络服务器

运行docker-compose up 后,我看到所有服务都已启动并且看起来运行良好。我的webserver 服务使用以下 sqlalchemy 连接字符串连接到 postgres:postgresql+psycopg2://airflow:airflow@postgres/airflow

每当我终止组合(使用ctrl-cdocker-compose stop)然后重新启动它时,postgres 中的数据似乎仍然存在。我认为它持续存在的原因是因为我的网络服务器从上一个会话的数据开始。

我阅读了postgres docker image 的文档并找到了PGDATA 环境变量。我试图强制将其设置为默认值(如我的 docker compose 文件中的注释行所示,但这没有帮助。我不确定如何调试数据似乎在容器启动之间持续存在的原因。

如何强制我的 postgres 容器在每次新初始化时重新开始?

【问题讨论】:

【参考方案1】:

由于您没有销毁 postgres 容器,您的数据被保留。你使用了docker-compose stop,它只让容器休眠。请改用docker-compose down。它会完全破坏容器(但不会破坏图像)。

【讨论】:

啊,我明白了。向容器发送ctrl-c 是否只会使其休眠?有没有办法让我的数据即使在休眠状态下也不会持续存在?如果设置了某些环境变量,也许在启动过程中会擦除 DB 的命令? 您的数据不会保留,因为您没有使用卷。数据仅在您的容器中。如果你销毁它(使用 down 或 rm),下一个“up”将创建一个带有新数据库的新容器。

以上是关于如何强制 postgres docker 容器从新数据库开始的主要内容,如果未能解决你的问题,请参考以下文章

Visual Studio Docker Tools如何从头开始强制容器重建

如何保证 docker 后台进程重启,而不引起容器关闭

如何保证 docker 后台进程重启,而不引起容器关闭

如何保证 docker 后台进程重启,而不引起容器关闭

docker启动redis并设置密码

Docker 容器开机自启