当前位置: 首页 > 知识库问答 >
问题:

如何强制postgres docker容器从新数据库启动

柯建修
2023-03-14

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

version: "3"
services:
    redis:
        image: 'redis:3.2.7'
        # command: redis-server --requirepass redispass

    postgres:
        image: postgres:9.6
        ports:
            - "5432:5432"
        environment:
            - POSTGRES_USER=airflow
            - POSTGRES_PASSWORD=airflow
            - POSTGRES_DB=airflow
#            - PGDATA=/var/lib/postgresql/data


    webserver:
        image: airflow:develop
        depends_on:
            - postgres

        ports:
            - "8080:8080"

        command:
            - webserver

运行docker-compose up之后,我看到所有的服务都启动了,并且看起来工作良好。我的WebServer服务使用以下sqlalchemy连接字符串连接到postgres:PostgreSQL+Psycopg2:/airflow:airflow@postgres/airflow

每当我终止组合(使用Ctrl-Cdocker-compose stop)然后重新启动它时,postgres中的数据似乎会持续存在。我相信它持续存在的原因是因为我的webserver从上一个会话的数据开始。

我阅读了postgres docker映像的文档,并找到了pgdata环境变量。我试图强制将其设置为默认值(如我的docker compose文件中的注释行所示,但这没有任何帮助。我不知道如何调试为什么数据似乎在容器启动之间持久化。

如何强制我的postgres容器以每一个新的初始化重新开始?

共有1个答案

咸玄天
2023-03-14

您的数据被持久化,因为您没有破坏postgres容器。您使用了docker-compose stop,它只对容器进行Hibernate。请改用docker-compose down。它完全破坏容器(但不破坏图像)。

 类似资料:
  • 问题内容: 在我的React应用程序中,我有两种不同类型的组件: 演示文稿 和 容器 。大约是Dan Abromov的“ Presentational and Container Components”之后 ,除了我不使用Flux或Redux。 现在,我具有以下结构: 该负责从一些REST API加载数据,如果成功的话,代表们提交的数据的。 该负责添加新用户,再通过调用一个REST API。现在,

  • 问题内容: 我正在使用Docker,并且拥有PHP,MySQL,Apache和Redis的堆栈。我现在需要添加MongoDB,因此我正在检查Dockerfile中的最新版本以及MongoDB Dockerhub中 的docker- entrypoint.sh 文件,但是我找不到设置默认数据库,管理员用户/密码以及可能进行身份验证的方法文件中容器的方法。 在MySQL中,您可以设置一些ENV变量,例

  • 在我进行任何代码更改后,我的典型开发步骤是: < li >更改代码并构建jar文件 < li >构建使用jar文件的docker映像 < li >取消当前的“docker-compose up”命令。 < li >再次运行" docker-合成"。 我的docker-compose文件有五个服务。在第三步,所有的容器都倒下了。理想情况下,我只需要重新运行我的应用程序容器。 我正在寻找一种方法,在批

  • 我使用的是ZF2 skeleton应用程序,它有一个.gitignore,可以防止外部库提交到git。在调试过程中,我喜欢在库的源代码中到处更改内容,以了解如何工作。如果这些是版本控制的,将很容易将它们恢复到原始状态。 如何强制Composer重新安装特定的框架,以便再次获得新的未修改副本? PS:请不要建议删除.gitignore文件,因为它存在是有原因的;它阻止我的第三方库进入我的应用程序存储

  • 我使用 liquibase 变更集创建了一个 Postgresql 数据库 A。现在,我正在创建一个应用程序,该应用程序允许创建新的数据库 B 并从数据库 A 实时复制架构,包括 liquibase 变更集,因为数据库以后仍然可以更新。请注意,在数据库 A 中复制的架构时,可能已经更新,从而使基本变更集过时。 我的主要问题是: 如何使用liquibase将PostgreSQL模式x从数据库a(在运

  • testcontainers oracleContainer在Dokerfile中定义的entrypoint发生更改之前启动,以完成并创建测试所需的用户。 容器运行后,将执行一些sql脚本创建表并用数据填充表。这些脚本失败,因为脚本中提到的用户尚未创建。 testcontainers没有等待完成安装。 通过使用以下命令检查日志: 我可以看到testcontainers从不等待它完成。 关于这个“b