当前位置: 首页 > 知识库问答 >
问题:

如何使用Docker Compose容器存储数据?

南门新知
2023-03-14

我有一篇docker文章。yml,我有一个Postgres数据库,Grafana在上面运行以查询数据。

version: "3"

services:
  db:
    image: postgres
    container_name: db
    ports:
      - "5432:5432"
    environment:
      - POSTGRES_PASSWORD=my_secret_password
      
  grafana:
    image: grafana/grafana
    container_name: grafana
    depends_on:
      - db
    ports:
      - "3000:3000"

我用命令docker compose up启动这个compose,但是如果我不想丢失任何数据,我必须运行docker compose stop,而不是docker compose down。

我还阅读了docker提交,但“提交操作将不包括安装在容器内的卷中包含的任何数据”,所以我想它对我的需求没有用。

存储创建的卷并使用命令向上/向下重用它们的正确方法是什么,即使在重新创建容器时也是如此?我必须使用每个图像提供的某种备份方法(例如,Postgres的DB导出,Grafana的其他导出),或者在docker compose.yml中有一种方法可以做到这一点?

编辑:我也读过关于卷的内容,但是有没有标准的方法来存储所有内容?

在@DannyB提供的链接中,将体积设置为/postgres数据:/var/lib/postgresql而不是/postgres data:/var/lib/postgresql/data导致容器无法存储实际文件夹。

我的问题是:每个图像都必须遵循像上面那样的特定模式?存储底层卷的数据路径存在于每个Docker image自述文件中?或者有类似的情况:

volumes:
  - ./my_image_root:/

共有1个答案

汪德明
2023-03-14

Docker提供了卷作为在容器调用之间持久化卷和在容器之间共享数据的方法。

它们在撰写文件中声明和使用非常简单:

volumes:
  postgres:
  grafana:

services:
  db:
    image: postgres
    ports:
      - "5432:5432"
    environment:
      - POSTGRES_PASSWORD=my_secret_password
    volumes:
      - postgres:/var/lib/postgresql/data
      
  grafana:
    image: grafana/grafana
    depends_on:
      - db
    volumes:
      - grafana:/var/lib/grafana
    ports:
      - "3000:3000"

(可选)您还可以将本地目录设置为html" target="_blank">容器卷,并添加一个附加功能,使文件不仅可以从容器内部轻松访问。这对于将特定配置文件装载到其在容器中的位置特别有用,您可以像任何其他文件一样在本地编辑该文件,使用更新的配置重新启动容器(证书和其他类似文件也可以充分利用此选项)。你这样做:

    volumes:
     - /home/myusername/postgres_data/:/var/lib/postgresql/data/

另外,我在本文中省略了container_名称和版本指令。yml因为(从docker 20.10开始),docker compose规范自动确定版本,并且docker compose暴露了足够的功能,通常不需要直接使用短名称访问容器。

 类似资料:
  • 作为Docker的菜鸟,考虑使用大小为几百千兆字节或更多的SQL服务器进行存储,在我看来,在容器中存储这么多是不可行的。加载一个大文件需要时间,太字节范围内的文件的合理位置是将它与容器分开装载。 在谷歌搜索这些信息几天后,询问社区似乎更符合逻辑。希望一幅画能抵得上千言万语。 SQL Server容器如何装载外部SQL Server源(mdf、ldf、ndf),因为这些源位于Fortress(请参见

  • 现在,每次运行脚本时,我都会导入一个相当大的作为数据帧。有没有一个好的解决方案可以让数据帧在运行之间不断可用,这样我就不用花那么多时间等待脚本运行了?

  • 我正在努力创建一个pfx文件与Xamarin和BouncyCastle。我有以下设置/规格 .NET:PCL.NET Framework 4.5.1 沙马林:4.5.0.476 BouncyCastle:BouncyCastle签名的1.7.0.1(NuGet包) 我想为我的移动客户端生成一个自签名证书,以便根据我的服务器对自己进行身份验证。使用BouncyCastle的创建工作非常好。我的问题是

  • 问题内容: 目前,我正在使用一项服务来执行操作,即从服务器检索数据,然后将数据存储在服务器本身上。 取而代之的是,我想将数据放入本地存储中,而不是将其存储在服务器上。我该怎么做呢? 问题答案: 这是我存储和检索到本地存储的代码的一部分。我使用广播事件来保存和恢复模型中的值。

  • 这是一个相当广泛的问题,不是特定于代码的。我正在寻找那些知道如何实施这一要求的人的意见 我正在构建一个音乐应用程序,人们可以在其中排队音乐对象。音乐对象看起来像 我非常想实现具有以下功能的相同的 即使在浏览器关闭时也能保持队列 检索任何队列(如果存在)的能力 能够洗牌,强制队列中对象的顺序播放 我对此非常陌生,所以不知道在哪里存储这些数据。请帮助我理解我需要学习什么来实现这一点。

  • 我想将二进制文件从Windows FileSystem上传到Azure blob。我通过以下步骤通过Azure数据工厂实现了这一点 文件系统上安装的集成运行时 上传后,我正在执行一些ETL活动。所以我的ADF管道有两个组成部分, 复制数据 Databricks笔记本 我想知道是否可以将复制数据片段移动到Databricks?我们可以使用Azure DataRicks将二进制文件从Windows文件