如何和在哪里的官方docker形象的PostgreSQL坚持其数据库

我是新来的docker工人,有点困惑,因为我期待着我的PostgreSQLdocker容器不能够保存任何数据,但是当我停止它时,我把它旋转回来,我的数据库数据似乎仍然在那里。

我一直在寻找现有的答案,并发现堆栈交换以下内容:
(对不起,我没有代表超过2个链接)

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

但我还是不明白。 也许有人可以为我更明显地拼出来! 这就是我所做的:

(我使用的docker撰写和构build文件显示在这篇文章的底部)
我遵循Docker文档站点的教程:
快速入门:Docker Compose和Django
这一切都工作完美,所以我继续按照Django的应用程序教程:
编写你的第一个Django应用程序
再次,所有的好,所以我在我的新网站上玩了一下,导致数据库填充一些数据。

我可以看到我的示例Django应用程序的Web应用程序代码是如何在我的主机上安装在卷上的,并且也复制到了我再次运行docker-compose时生成的映像, 但是我期望在postgres中存储任何数据数据库容器在停止所有容器后将丢失。 但是,在停止所有运行的容器之后,我回到docker项目目录并运行:

docker-compose up 

这一切都直接回来了,我以前的图像运行的数据仍然在数据库中,并在我的Djangonetworking应用程序中使用。

发生什么了?

  1. 数据库在哪里存储数据?
    • 主机上的某个地方?
    • 我怎么知道那是哪里?
  2. postgres容器如何pipe理在单独运行中持久化数据?
    • 构build文件的哪一部分使这种情况发生?
    • 或者这是官方postgres图像默认行为?

以下是我在上面引用的docker quickstart教程指导下使用的构build文件。

Dockerfile

 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 

泊坞窗,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>