【问题标题】:How can I keep changes I made to Postgresql Docker container?如何保留对 Postgresql Docker 容器所做的更改?
【发布时间】:2017-12-15 04:08:53
【问题描述】:

我正在使用官方的 postgresql docker 镜像来启动一个容器。

之后,我安装了一些软件并使用 psql 创建了一些表等。我首先启动 postgres 容器,如下所示:

docker run -it  --name="pgtestcontainer" -e POSTGRES_PASSWORD=postgres -p 5432:5432 postgres:9.6.6

然后我用

附加到这个容器
docker  exec -it pgtestcontainer bash

然后我安装软件,创建数据库表等。

之后,我首先退出第二个终端会话(我用来安装软件)并在第一个终端会话中执行 ctrl + c 以停止 postgres 容器。

此时我的期望是,如果我提交这个 postgres 图像

docker commit xyz...zxy pg-commit-test

然后基于提交的镜像运行一个新容器:

docker run -it  --name="modifiedcontainer" -e POSTGRES_PASSWORD=postgres -p 5432:5432 pg-commit-test

那么我应该准备好所有的软件和表格。

上述过程的结果是我安装的软件在修改后的容器中,但 sql 表等已经消失。所以我的猜测是我的方法或多或少是正确的,但是我缺少一些特定于 postgres docker 图像的东西。

我知道如果没有绑定外部目录或 docker 卷,它会从头开始创建数据库 /var/lib/postgresql/data 但我没有这样做,在提交之后,我希望数据库的内容保持原样。

我如何遵循上述(或正确的)过程并保留对数据库的更改?

【问题讨论】:

    标签: postgresql docker


    【解决方案1】:

    postgres Dockerfile 在 /var/lib/postgresql/data 处创建一个挂载点,如果您需要持久数据,则必须在该挂载点上挂载一个外部卷。

    ENV PGDATA /var/lib/postgresql/data
    RUN mkdir -p "$PGDATA" && chown -R postgres:postgres "$PGDATA" && chmod 777 "$PGDATA" # this 777 will be replaced by 700 at runtime (allows semi-arbitrary "--user" values)
    VOLUME /var/lib/postgresql/data
    

    https://docs.docker.com/engine/reference/builder/#notes-about-specifying-volumes

    您可以使用创建卷

    docker volume create mydb
    

    然后你可以在你的容器中使用它

    docker run -it --name="pgtestcontainer" -v mydb:/var/lib/postgresql/data -e POSTGRES_PASSWORD=postgres -p 5432:5432 postgres:9.6.6
    

    https://docs.docker.com/engine/admin/volumes/volumes/#create-and-manage-volumes

    【讨论】:

      【解决方案2】:

      在我看来,最好的方法是使用 /docker-entrypoint-initdb.d 文件夹和其中的脚本创建自己的映像。 看How to extend this image

      但如果没有音量,您将无法(我认为)保存数据。

      【讨论】:

        【解决方案3】:

        我通过传递 PGDATA 参数解决了这个问题,该参数的值不同于绑定到 docker 卷的路径,如对 this question 的回复之一中所建议的那样。

        【讨论】:

        • docker run -e PGDATA=/var/lib/postgresql/pgdata -e POSTGRES_PASSWORD=YourPa$$W0rd -d postgres
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-07-15
        • 2017-01-13
        • 2021-03-14
        • 2014-08-05
        • 1970-01-01
        • 1970-01-01
        • 2019-12-26
        相关资源
        最近更新 更多