【问题标题】:Using a PostgreSQL database with Docker and Flask, how does it work?使用带有 Docker 和 Flask 的 PostgreSQL 数据库,它是如何工作的?
【发布时间】:2016-09-07 00:21:23
【问题描述】:

我刚开始使用 Docker,并使用 Python3、Flask、UWSGI 和 nginx 创建了一个镜像和运行容器。

现在我想在 Flask 中使用 postgresql 数据库。我阅读了以下页面,链接容器对我来说似乎是合乎逻辑的。 (https://hub.docker.com/_/postgres/)

我还有一些疑问,或者 Docker 的原理对我来说还不够清楚。但是,如果我创建一个 postgresql 映像和运行容器,并将其链接到我的 Flask 应用程序,会发生什么情况:

  • 我重建镜像或重启容器,我的数据库数据到哪里去了?没了?
  • 我想在我的 Flask (Docker) 应用程序中使用我的数据库,我需要在我的配置中添加什么? (DATABASE_URI、NAME 等)
  • 我想备份我的数据库,或者在其中加载数据?我可以直接连接吗?

您可能已经注意到,我显然是使用 Docker 的初学者,也许我只是误解了原理。如果有人能指出我正确的方向,真的很感激!

【问题讨论】:

  • 1.数据库将通过重启和图像重建持续存在(只要您继续使用官方 postgres 图像并且不更改卷定义 2. 如果您正确地将 postgres 容器链接到您的烧瓶应用程序容器,您可以通过名称链接到数据库( container_name:5432)。3、只要将postgres端口映射到host,就可以用任何标准的SQL工具连接到它。

标签: python postgresql flask docker


【解决方案1】:

我重建镜像或重新启动容器,我的数据库数据到哪里去了?它消失了吗?

  • 不,数据没有消失。删除数据的唯一时间是删除容器:docker rm <my postgres container>。唯一不正确的情况是,如果您将卷挂载到容器以公开数据卷:docker run -td -p 5432:5432 -v /mydata/volume:/var/lib/postgresql/data postgres:9.5.2

我想在我的 Flask (Docker) 应用程序中使用我的数据库,我需要在我的配置中添加什么? (DATABASE_URI、NAME 等)

  • 这可能是一个有争议的话题,但我会使用您在启动容器时设置的环境变量:docker run -td -p 80:5000 -e POSTGRES_URL=172.12.20.1 mycontainer/flask:latest 在您的配置中,您将使用os.getenv('POSTGRES_URL', 'localhost')。如果容器已链接,这允许您默认为 localhost,否则您可以将其指向在另一台机器上运行的另一个容器。这更好,因为它允许您的部署具有更大的灵活性。

我想备份我的数据库,或在其中加载数据?我可以连接到它吗?

  • 是的,就像其他任何事情一样,您可以使用您在容器运行时指定的凭据在 IP:PORT 上连接到 Postgres。

【讨论】:

    猜你喜欢
    • 2016-09-13
    • 1970-01-01
    • 2018-10-10
    • 2011-02-26
    • 2021-01-30
    • 1970-01-01
    • 1970-01-01
    • 2021-02-21
    相关资源
    最近更新 更多