postgresql - PostgreSQL的官方Docker镜像如何以及在何处保留其数据库

标签 postgresql docker persistence docker-compose

我是Docker的新手,有些困惑,因为我期望PostgreSQL Docker容器不能持久存储任何数据,但是当我停止它后将其旋转回去时,我的数据库数据似乎仍然存在。

我一直在寻找现有的答案,并在堆栈交换中找到了以下内容:
(对不起,我的代表没有发布两个以上的链接)

  • Docker postgres持久性和容器生存时间
  • 如何在Docker Postgres的脚本中创建用户/数据库
  • 如何处理docker
  • 中的持久性存储(例如数据库)

    但是我还是不明白。也许有人可以对我说清楚一点!这是我所做的:

    (我使用的docker compose和build文件显示在这篇文章的底部)
    我遵循了Docker文档站点上的教程:
    Quickstart: Docker Compose and Django
    一切都运行良好,因此我继续遵循Django应用程序教程:
    Writing your first Django app
    一切都很好,所以我在新网站上玩了一会儿,导致数据库中填充了一些数据。

    我可以看到示例Django应用程序的网络应用程序代码是如何粘贴的,因为它已安装在主机上的某个卷上,并且还复制到了我再次运行docker-compose 时生成的镜像中,但是我希望存储在停止所有容器后,postgres数据库容器将丢失。 但是,在停止所有正在运行的容器之后,我回到了docker项目目录并运行:
    docker-compose up
    

    一切都直接恢复了,而我之前运行的图像中的数据仍然保留在数据库中,并在我的Django Web应用程序中使用。

    发生什么了?
  • 数据库在哪里存储数据?
  • 主机上的某个位置?
  • 我怎么知道那是哪里?
  • postgres容器如何在不同的运行中持久保存数据?
  • 构建文件的哪一部分可以实现?
  • 还是官方postgres图像的某种默认行为?

  • 以下是我根据上面引用的docker quickstart教程的指示使用的构建文件。

    Docker文件
    FROM python:2.7
    ENV PYTHONUNBUFFERED 1
    RUN mkdir /code
    WORKDIR /code
    ADD requirements.txt /code/
    RUN pip install -r requirements.txt
    ADD . /code/
    

    requirements.txt
    Django
    psycopg2
    

    docker-compose.yml
    version: '2'
    services:
      db:
        image: postgres
      web:
        build: .
        command: python manage.py runserver 0.0.0.0:8000
        volumes:
          - .:/code
        ports:
          - "8000:8000"
        depends_on:
          - db
    

    最佳答案

    它存储在docker容器中。停止时,容器仍保留其所有数据。只有删除数据,您才会丢失数据:

    docker rm <container>
    

    关于postgresql - PostgreSQL的官方Docker镜像如何以及在何处保留其数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37990067/

    相关文章:

    python - 如何在docker中正确挂载代码进行开发

    java - 我的 servlet 抛出异常 ResourceClosed

    java - 是否有任何与 JPAv2 兼容的供应商不可知持久性 api 公开可用

    docker - Gitlab CI 尝试从公共(public) docker hub 中查找 'of:latest' 图像

    sharepoint - SPPersistedObject 和列表<T>

    json - 检查 Postgres 中 JSON 值的值类型

    mysql - ID的真正作用是什么

    javascript - 大家好!我想知道为什么 psql 终端中出现这个奇怪的错误

    mysql - talend可以将序列化数据从MYSQL迁移到PostgreSQL

    node.js - 基于ubuntu创建nodejs容器Docker