在Docker中,如何在容器之间共享文件,然后将它们保存到镜像中?

2023-11-27

我想将容器共享卷中的数据提交到映像。我好像做不到?我的印象是,这在 Docker 中可能是不可能的,但这似乎与不将数据留在主机上的整个理念完全不一致,所以我认为必须有一种方法可以做到这一点。

1. 1号航站楼

在 1 号航站楼中启动一个带有卷的容器。

$ docker run -it -v /data ubuntu:14.10 /bin/bash
root@19fead4f6a68:/# echo "Hello Docker Volumes." > /data/foo.txt

2. 2号航站楼

在终端 2 中启动第二个容器,容器 1 中的文件就在那里,因此 docker 卷都可以正常工作。

$ docker run -it --volumes-from 19fead4f6a68 ubuntu:14.10 /bin/bash

root@5c7cdbfc67d8:/# cat /data/foo.txt
Hello Docker Volumes.

3. 3号航站楼

我的理解是,我只能将差异提交到图像,因此我检查两个容器上的差异。由于某些奇怪的原因,我的更改没有显示出来!?

$ docker diff 19fead4f6a68
A /data

$ docker diff 5c7cdbfc67d8
A /data

4. 返回 1 号航站楼

我在卷文件夹之外创建一个文件

 root@19fead4f6a68:/# echo "Docker you are a very strange beast...." > /var/beast.txt

5. 返回 3 号航站楼

我们现在可以提交一些更改,尽管我相当沮丧,因为这不是我需要与其他容器共享的卷中的数据。

$ docker diff 19fead4f6a68
A /data
C /var
A /var/beast.txt

显然这是设计使然。有人知道为什么 docker 不允许我将卷数据保存到提交吗?无论如何,是否可以在容器之间共享文件,然后将它们保存到映像中?我觉得我一定缺少什么?特别是在共享数据的同时避免主机依赖性。


卷位于容器映像之外。这正是它们的用途——将数据放入不在图像中的容器中。

来自Docker 文档:

数据卷是一个或多个容器中专门指定的目录,它绕过联合文件系统,为持久或共享数据提供多种有用的功能:

  • 数据卷可以在容器之间共享和重用
  • 直接对数据量进行更改
  • 更新镜像时不会包含对数据量的更改

如果要将某些更改保存为图像的一部分,请在图像内部而不是在卷中进行更改。如果您想在多个容器之间共享更改,请将数据放入卷中,但您必须自己安排快照、回滚等,因为 Docker 没有该功能。

也许你会感兴趣Flocker.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在Docker中,如何在容器之间共享文件,然后将它们保存到镜像中? 的相关文章

随机推荐

  • 如何在 appsettings.json 中加载多态对象

    有什么方法可以从中读取多态对象appsettings json以强类型的方式 下面是我需要的一个非常简单的示例 我有多个应用程序组件 名为Features这里 这些组件是由工厂在运行时创建的 我的设计意图是每个组件都由其单独的强类型选项配置
  • sqlite3 中的批量插入速度更快?

    我有一个大约 30000 行数据的文件 我想将其加载到 sqlite3 数据库中 有没有比为每行数据生成插入语句更快的方法 数据以空格分隔并直接映射到 sqlite3 表 是否有任何类型的批量插入方法可以将卷数据添加到数据库中 如果不是内置
  • 如何在远程端存储库上“git Blame”?

    在我的服务器上 我托管我的个人 git 远程项目 使用 gitosis 并且我构建了一个 Web 界面来浏览存储库 类似于 Github 在远程端 您不允许做很多事情 因为缺少工作树 这是正确的 顺便说一句 对于存储库资源管理器 只需很少的
  • 如何更改 WAMPSERVER 中的 MySQL 排序规则

    我如何将 WAMPSERVER 中的 MySQL 排序规则从 latin1 swedish ci 更改为 UTF 8 因为我认为我的 HTML 特殊字符变得一团糟 放入你的C wamp bin mysql mysql5 5 24 my in
  • ListView setOnItemClickListener 在自定义列表视图中不起作用

    我有一个列表视图 每行有两个文本视图和一个编辑文本 列表视图 setOnItemClickListener 不起作用 这是我的 Java 代码 public class CreateChallan extends Activity List
  • ASP.NET:如何从 web.config ConnectionString 创建连接?

    如何构建基于 DbConnection提供商名称 Sample 提供商名称s 系统 数据 SqlClient 系统 数据 OleDb 系统数据 ODBC FirebirdSql Data FirebirdClient 我的 IIS 服务器的
  • (如何)我可以从套接字文件描述符确定套接字系列

    我正在编写一个 API 其中包括 IPC 函数 这些函数将数据发送到另一个进程 该进程可能位于本地或另一台主机上 我真的希望发送功能能够像下面这样简单 int mySendFunc myDataThing t thing int sd 调用
  • Visual Studio 2017 Nuget pack 排除项目引用作为另一个 nuget 引用,而是添加程序集

    当我们在 Visual Studio 2017 中创建 nuget 包时 它默认将项目引用添加为另一个 nuget 引用 我们如何在创建包时禁用它 而是 选择不同的包名称 创建包时包含项目的 dll The PackageReference
  • 为什么结构体中的迭代器可以修改它?

    我发现值类型中的迭代器方法是允许修改的this 但是 由于 CLR 的限制 调用方法看不到这些修改 this按值传递 因此 迭代器和非迭代器中的相同代码会产生不同的结果 static void Main Mutable m1 new Mut
  • 通用可变参数的警告

    我声明了以下方法 private void mockInvokeDBHandler Map
  • 检测耳机何时插入

    有什么方法可以以编程方式确定耳机何时插入计算机 本质上 我只是想编写一个简单的工具 除非插入耳机 否则它会将我的声音静音 这可能吗 在 Windows Vista 及更高版本中 您可以使用设备到达和删除通知并检索端点外形规格来确定音频解决方
  • 在 MYSQL 中使用 SELECT DISTINCT

    做了很多搜索 但还没有真正找到我的 MYSQL 问题的答案 SELECT DISTINCT name type state country FROM table 结果 1 795 条记录 SELECT DISTINCT name FROM
  • 一些 startBrowsingForNearbyPlayersWithReachableHandler 问题

    我正在尝试使用 GameKit 进行本地匹配 GKMatchmaker sharedMatchmaker startBrowsingForNearbyPlayersWithReachableHandler 本质上 我正在尝试实现无界面的本地
  • 如何比较日期时间值,考虑到时区?

    我有两个DateTime变量 每个都有一个存储在变量中的时区 这样当我ToString格式包括 zzz 我得到一个字符串 包括 01 00 在设计时 我不知道时区是什么 我希望变量具有彼此不同的时区 我想比较两者DateTime值 以便我知
  • 如何在 Rust 中保存 PNG 图像?

    给定一个向量u8字节 每像素 4 字节 RGBA 如何将其保存到 PNG 文件 你可以使用 Piston 存储库中的镜像箱将原始缓冲区保存到磁盘 页面底部的示例向您展示了如何执行此操作 extern crate image fn main
  • 如何从xml文件中删除根元素

    亲爱的朋友们下午好 我的问题可能是这是一个非常基本的问题 即我们如何使用 xslt 从 xml 文件中删除根元素 下面给出了 Xml 文件示例
  • 确定在 python 中表示为字符串的值的类型

    当我使用 python 中的 csv 解析器读取逗号分隔的文件或字符串时 所有项目都表示为字符串 请参见下面的示例 import csv a 1 2 3 4 5 r csv reader a for row in r d row d 1 2
  • 寻找每个患者最接近的匹配时间

    我有两组数据 第一组 patient lt c A A B B C C C C arrival lt c 11 00 11 00 13 00 13 00 14 00 14 00 14 00 14 00 lastRow lt c Yes Ye
  • HQL 左连接:连接所需的路径

    我是 Hibernate 的新手 我有一个关于 HQL Left join 的问题 我尝试左连接 2 个表 患者和提供者 并不断收到 连接所需的路径 第二个表上的错误 如果有人可以帮助解决这个问题 我们将不胜感激 这是两个表 类的映射 病人
  • 在Docker中,如何在容器之间共享文件,然后将它们保存到镜像中?

    我想将容器共享卷中的数据提交到映像 我好像做不到 我的印象是 这在 Docker 中可能是不可能的 但这似乎与不将数据留在主机上的整个理念完全不一致 所以我认为必须有一种方法可以做到这一点 1 1号航站楼 在 1 号航站楼中启动一个带有卷的