主机和Docker容器之间的文件互传方法汇总

 

Docker渐渐成为前端的一个工具,它像一个通用包装,可以把各种环境包裹其中,从而实现跨设备的兼容。使用的过程中,往往会需要将本地的文件和docker容器内部的文件互传:将主机的文件传递给容器内,让里面的工具读写;将容器内的文件拷贝出来,修改了再传入...

一、主机到 Docker 容器/镜像的文件传输

将文件从主机传输到容器或镜像中,可以在容器启动前容器运行时进行。

1. 使用 COPYADD 指令(构建镜像时)

当你在创建 Docker 镜像时,Dockerfile 提供了两条指令 COPYADD,它们用于将主机上的文件复制到镜像中。

  • COPY 指令:将主机的文件或目录复制到镜像的指定路径。
  • ADD 指令:除了 COPY 的功能外,还支持复制远程文件(如 URL)并自动解压压缩文件(如 .tar)。
示例
# Dockerfile
# 从主机的工作目录将文件复制到镜像的 /app 目录 
COPY ./myapp /app 
# 或者使用 ADD 指令(可以解压 .tar 文件) 
ADD ./myarchive.tar.gz /app

这种方式适用于在构建镜像时预先将主机文件打包进镜像内。它的优点是镜像内的文件是静态的,适合分发和部署。

需要注意的是,复制文件不能跨越上下文,比如你构建的镜像在 /a/b/c目录,无法将/a目录下的文件复制到镜像内,或是COPY ../xxx 的也不行***

2. 使用 docker run-v 选项(容器启动时挂载卷)

当容器启动时,可以通过 -v--mount 选项将主机目录挂载到容器中。这种方法不会将文件打包进镜像,而是在容器运行时实时访问主机上的文件。

示例
docker run -v /path/on/host:/path/in/container my-container

在此示例中,主机的 /path/on/host 目录会挂载到容器的 /path/in/container 目录中。容器中的应用可以实时访问和修改主机上的文件,这种方式非常适合开发时同步文件。

3. 使用 docker cp 命令(运行时复制)

docker cp 命令允许在容器运行时将文件从主机复制到容器中。

示例:
docker cp /path/on/host my-container:/path/in/container

这种方式适合偶尔的文件传输,不需要重启容器。你可以在容器运行时向容器内添加或更新文件。

二、Docker 容器/镜像到主机的文件传输

Docker 同样提供多种方法将文件从容器或镜像传输到主机中。

1. 使用 docker cp 命令

最直接的方法是使用 docker cp 命令,它允许从正在运行的容器或已经停止的容器中将文件复制到主机。docker cp 是一个非常灵活的工具,它既支持文件也支持目录的传输。

示例:
# 从正在运行的容器中复制文件到主机 
docker cp my-container:/path/in/container /path/on/host

即使容器已经停止,docker cp 仍然可以工作,因为 Docker 会保留容器的文件系统状态,直到容器被删除。

2. 在容器启动时挂载卷(双向传输)

如前所述,使用 docker run -v--mount 选项可以实现主机与容器之间的文件共享。由于这是双向传输,因此容器对挂载卷中数据的修改会同步到主机上。

示例:
docker run -v /path/on/host:/path/in/container my-container# docker exec -it xxxx sh
# cp xxx /path/in/container/a.bin 
# 在容器内执行复制就可以传出来,外部复制到这个目录就传进去了,类似共享目录

容器内的任何文件更改都会反映在主机的 /path/on/host 目录中。这种方式对于需要实时同步数据的情况非常有效,例如开发时频繁修改的文件。

3. 延伸之复制镜像文件到本地

此时就需要用docker run使用镜像启动容器,然后再利用docker cp复制到本地。使用场景或实例参考我之前的博文:《拿下奇怪的前端报错》:nvm不可用报错`GLIBC_2.27‘‘GLIBCXX_3.4.20‘not Found?+ 使用docker构建多个前端项目实践-CSDN博客icon-default.png?t=O83Ahttps://blog.csdn.net/m0_38015699/article/details/142327130

三、适合场景的选择

  • 使用 COPY/ADD 指令:适合在构建镜像时静态地将文件打包进镜像,适合用于镜像的分发和部署。

  • 使用 docker run -v 挂载卷:适合开发环境或需要实时同步文件的场景,避免了每次修改文件都需要重启容器。

  • 使用 docker cp:适合容器运行时或容器停止后从容器中提取文件,适用于需要从容器中临时获取或更新文件的情况。

四、注意事项

  1. 权限问题:在挂载主机目录到容器时,容器内的用户权限可能会与主机用户不一致,导致文件无法访问或修改。可以通过设置正确的权限或用户来解决这个问题。

  2. 容器挂掉后的文件传输:即使容器已经停止,docker cp 仍然可以从停止的容器中提取文件。容器删除前,文件系统状态会被保留。

  3. 性能影响:在使用 -v 挂载卷时,主机与容器间的文件交互性能可能会受到一定影响,特别是在处理大量文件时,需要测试性能是否满足要求。

相信看到这里,记得动手操练下。相信你就能够熟练掌握docker和主机之间的文件互转了,其实docker就是一个文件系统的描述,一层层的累起来,镜像是抽象的定义类似Class,容器类似实例化的对象,通过多种方法实现容器和主机的文件互转就可以,甚至可通过http哦

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/144724.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

向日葵好用吗?4款稳定的远程控制软件推荐。

远程控制技术现在已经被应用于很多个领域,像企业办公,远程协助,智能家居,工业控制等等。我们常常会用到的时前两种。而实现远程控制的方式也有多种,但是最方便高效的还是使用第三方软件。我最常使用的是向日葵&#xf…

城市脉络下的空间句法:中介中心性、接近中心性与绕行率的深度解析

这一篇是对上篇内容的继续深化,也就是sDNA “整体分析”(Integral Analysis)计算结果代表的意思,有哪些?意义是什么? 上篇文章指路:城市脉络下的空间句法:整合度与选择度的深度解析…

vue实现二维码生成器应用

实现一个简单的二维码生成器应用,可以使用 Vue 前端结合一个 JavaScript 库(如 qrcode.js 或 QRCode.js)来生成二维码。以下是一个完整的实现步骤: 步骤 1:安装依赖 首先,你需要安装 qrcode 库&#xff0c…

Unity教程(十六)敌人攻击状态的实现

Unity开发2D类银河恶魔城游戏学习笔记 Unity教程(零)Unity和VS的使用相关内容 Unity教程(一)开始学习状态机 Unity教程(二)角色移动的实现 Unity教程(三)角色跳跃的实现 Unity教程&…

macOS平台编译MAVSDK源码生成mavsdk库与mavsdk_server服务可执行文件

克隆源码: 克隆命令 git clone https://github.com/mavlink/MAVSDK.git --recursive 克隆成功如下: 生成makefile (只生成mavsdk库) cmake -Bbuild/default -DCMAKE_BUILD_TYPE=Debug -H. 指定安装目录与生成目录: cmake -Bbuild/macos -DCMAKE_BUILD_TYPE=Debug -…

pg入门3—详解tablespaces2

pg默认的tablespace的location为空,那么如果表设置了默认的tablespace,数据实际上是存哪个目录的呢? 在 PostgreSQL 中,如果你创建了一个表并且没有显式指定表空间(tablespace),或者表空间的 location 为…

面试官问:你如何处理与同事或上级的分歧?【无标题】

面试官问:你如何处理与同事或上级的分歧? 当面试官问你如何处理与同事或上级的分歧,其实面试官的目的是评估你的沟通技巧、冲突解决能力和团队合作的能力。在一起共事,就一定有分歧发生,有争执是正常的,关…

OJ在线评测系统 思考主流OJ的实现方案 常用概念 自己的思考

OJ判题系统常用概念 OJ系统 在线判题系统 AC all accpeted 测试样例全部通过 题目介绍 题目输入 题目输出 题目输出用例 题目输入用例 不能让用户随便引入包 随便遍历 暴力破解 需要使用正确的算法 提交后不会立刻出结果 而是异步处理 提交后会生成一个提交记录 有运…

大牛直播SDK核心音视频模块探究

技术背景 视沃科技旗下”大牛直播SDK”,始于2015年,致力于传统行业极致体验的音视频直播技术解决方案,产品涵盖跨平台的实时RTMP推流、RTMP/RTSP直播播放(支持RTSP|RTMP H.265,Enhanced RTMP H.265)、GB28181设备接入、推送端播放…

内存管理篇-27寄存器映射:ioremap

驱动在读写寄存器是,需要将寄存器进行ioremap。在x86上,通过专用的指令进行编址访问,但是在arm上是进行统一的编址(占用32位4GB空间的某一小段),因此也叫memory-map的设备。 实现机制:

【IPOL阅读】点云双边滤波

文章目录 简介点云滤波处理结果 简介 IPOL,即Image Processing On Line,理论上是一个期刊,但影响因子很低,只是个SCIE,按理说没什么参考价值。但是,这个网站的所有文章,都附带了源代码和演示窗…

阿里云CTO:通义稳居全球最强开源大模型,性能接近GPT-4o

来源:首席数智官 9月19日,在2024杭州云栖大会上,阿里云CTO周靖人表示,阿里云正在围绕AI时代,树立一个AI基础设施的新标准,全面升级从服务器到计算、存储、网络、数据处理、模型训练和推理平台的技术架构体…

python+flask+mongodb+vue撸一个实时监控linux服务资源的网站

用pythonflaskmongodbvue写一个监控linux服务资源实时使用率的页面网站,并每30秒定时请求,把Linux数据保存数据到mongodb数据库中,监控的linux的资源有:cup、内存、网络带宽、mysql慢查询、redis、系统平均负载、磁盘使用率等&…

黑马头条APP手工测试项目

1.app有关概念 APP测试范围: 业务功能测试 专项测试:兼容性测试 、安装/卸载/升级测试、交叉事件测试 、push消息推送测试、性能测试、其他测试(用户体验、权限/边界、权限) 功能测试测试对象: 功能点(单…

synchronized是怎么实现的?

synchronized是JVM的语法糖,主要是通过JVM来控制的。其实现原理依赖于JVM的监视器和对象头。 synchronized修饰方法时,JVM会通过编译完的字节码的访问标记来区分该方法是否被synchronized修饰,在进入方法的时候就会进行获得锁的竞争&#xff…

今日所学啊

ArcGIS打不开焦点统计如何解决_arcgis焦点统计打不开-CSDN博客 好吧其实最后焦点统计还是不行&#xff0c;我就去ArcGIS Pro里做焦点统计了哈哈哈哈哈哈哈 visual studio多工程项目管理_visual studio 的模块管理-CSDN博客 1.今天成功#include <QNetworkReply>不画红线…

C++:布尔类型,引用,堆区空间

1.布尔类型 #include <iostream>using namespace std;int main() {bool b13;bool b20;cout << "b1" <<b1<< endl;cout << "b2" <<b2<< endl;cout <<boolalpha<< "b1" <<b1<<…

米客方德SD NAND 掉电测试

SD NAND 异常上下电测试的作用 SD NAND 异常上下电测试是一项关键的测试步骤&#xff0c;对确保SD NAND在不同电源条件下的稳定性和可靠性至关重要。 通过模拟正常和异常电源情况&#xff0c;测试可以验证设备的电源管理功能、检测潜在错误和异常行为&#xff0c;并评估设备在…

MacOS安装homebrew,jEnv,多版本JDK

1 安装homebrew homebrew官网 根据官网提示&#xff0c;运行安装命令 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"安装后&#xff0c;bash会提示执行两条命令 (echo; echo eval "$(/opt/homebrew/b…

公益入理塘,爱尔眼科“专科联盟”挂牌

2024年9月11日&#xff0c;成都爱尔眼科医院、理塘县藏医院“眼科专科联盟”揭牌仪式在理塘县藏医院隆重举行&#xff01; 由爱尔眼科四川省区医疗总监刘德根、成都爱尔眼科医院副院长巫雷带队&#xff0c;白内障科副主任王文惠、手术室护士杨梅、手术室护士肖婷、健教部唐青颖…