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

时间:2018-02-22 17:01:47

标签: postgresql docker docker-compose

我有一个看似如下的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中的数据似乎仍然存在。我认为它持续存在的原因是因为我的网络服务器从上一个会话的数据开始。

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

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

1 个答案:

答案 0 :(得分:3)

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