postgreSQL 的官方 docker 图像如何以及在何处保存其数据库

How and Where does the official docker image of postgreSQL persist its database

我是 docker 的新手,有点困惑,因为我希望我的 PostgreSQL docker 容器无法保留任何数据,但是当我在停止它后将其重新旋转时,我的数据库数据似乎还在。

我一直在寻找现有的答案,并在堆栈交换中找到了以下内容:
(抱歉,我没有代表 post 超过 2 个链接)

但是我还是不明白。也许有人可以为我把它拼写得更清楚一点!这就是我所做的:

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

我可以看到我的示例 Django 应用程序的网络应用程序代码是如何保留下来的,因为它安装在我主机上的一个卷上,并且还复制到我 运行 [=84= 时构建的图像中]-再次组合 ,但我预计 postgres 数据库容器中存储的任何数据在停止所有容器后都会丢失。 但是在停止我所有的 运行ning 之后containers 我回到我的 docker 项目目录和 运行:

docker-compose up

这一切都直接恢复了,我之前 运行 图像的数据仍然存在于数据库中,并在我的 Django 网络应用程序中使用。

这是怎么回事?

  1. 数据库存储它的数据在哪里?
    • 主机上的某个地方?
    • 我怎样才能找到它在哪里?
  2. postgres 容器如何管理跨不同的 运行s 持久化数据?
    • 构建文件的哪一部分实现了这一点?
    • 或者这是官方 postgres 图像的某种默认行为?


下面是我按照上述 docker 快速入门教程的指示使用的构建文件。

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>