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

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

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

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

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

    最佳答案

    我重建镜像或重新启动容器,我的数据库数据在哪里?没了吗

  • 不,数据没有消失。删除数据的唯一时间是是否删除了容器: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一样。
  • 09-04 08:32
    查看更多