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

news2024/9/21 4:26:58

 

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.coloradmin.cn/o/2146967.html

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

相关文章

【LLM大模型】如何让大模型更好地进行场景落地?

自ChatGPT模型问世后,在全球范围内掀起了AI新浪潮。 有很多企业和高校也随之开源了一些效果优异的大模型,例如:Qwen系列模型、MiniCPM序列模型、Yi系列模型、ChatGLM系列模型、Llama系列模型、Baichuan系列模型、Deepseek系列模型、Moss模型…

sqli-lab靶场学习(二)——Less8-10(盲注、时间盲注)

Less8 第八关依然是先看一般状态 http://localhost/sqli-labs/Less-8/?id1 然后用单引号闭合: http://localhost/sqli-labs/Less-8/?id1 这关的问题在于报错是不显示,那没办法通过上篇文章的updatexml大法处理。对于这种情况,需要用“盲…

从 InnoDB 到 Memory:MySQL 存储引擎的多样性

📃个人主页:island1314 🔥个人专栏:MySQL学习 ⛺️ 欢迎关注:👍点赞 👂🏽留言 😍收藏 💞 💞 💞 🚀前言 &#x1f525…

PSINS,GNSS速度与SINS滤波的MATLAB代码

文章目录 程序说明主要特点适用范围获取方式运行截图 程序说明 基于PSINS工具箱的GNSS和SINS滤波的MATLAB代码,观测量为GNSS的三轴速度。 专为工程师和研究人员设计,助您轻松实现高精度的导航和定位。 主要特点 高精度滤波算法:结合PSINS和…

内存dump文件分析

目录 dumpsneak攻击步骤: dump 打开Volatility工具目录,C:\Users\Administrator\Desktop\应急工具集\volatility 打开运行输入volatility.exe -f 文件 imageinfo(花费比较长的时间,对于这个mem文件,可以使用Win2012…

【C++初阶】vector模拟实现

✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅ ✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨ 🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿&#x1…

什么是全国特价电影票api?接口如何对接?

一、全国特价电影票接口对接的基本情况 接口包含信息:电影票API接口中包含影院、影厅、座位、影片、场次、日期及票价等信息。市场需求背景:随着我国电影消费市场的火爆,观影人数增多,除了猫眼、淘票票等平台,各大平台…

SLA 概念和计算方法

SLA 概念和计算方法 SLA SLA:服务等级协议(简称:SLA,全称:service level agreement) 网站服务可用性的一个保证 9越多代表全年服务可用时间越长服务更可靠,停机时间越短,反之亦然…

简单题66-加一(Python)20240918

问题描述&#xff1a; python class Solution(object):def plusOne(self, digits):""":type digits: List[int]:rtype: List[int]"""n len(digits)# 从最后一位开始处理进位for i in range(n - 1, -1, -1):if digits[i] < 9:digits[i] 1re…

xmos 编程指南

并行执行 并行执行时使用par {} 进行并行处理 点灯 #include <stdio.h> #include<xs1.h> #include<timer.h> #include<platform.h>port p XS1_PORT_8C;void hw(unsigned n) { printf("Hello world from task number %u\n", n); } int ma…

多线程---线程的状态及常用方法

1. 线程的状态 在Java程序中&#xff0c;一个线程对象通过调用start()方法启动线程&#xff0c;并且在线程获取CPU时&#xff0c;自动执行run()方法。run()方法执行完毕&#xff0c;代表线程的生命周期结束。 在整个线程的生命周期中&#xff0c;线程的状态有以下六种&#xff…

文件翻译英文是什么软件?5款软件评测助你决策

在企业的日常运营中&#xff0c;文件翻译格式的多样性常常成为沟通效率的瓶颈。 从简单的文本文件到复杂的PDF文档&#xff0c;每一种格式都可能因为其特有的结构和布局&#xff0c;给翻译工作带来额外的挑战。 掌握翻译技巧需要时间和实践&#xff0c;以下是一些实用的翻译技…

数据增强又突破了!升级版“双杀”两大顶会,实现无痛涨点

数据收集和标注的艰难想必大家都有所体会&#xff0c;不仅耗时耗力还很贵&#xff0c;一般人顶不住。那怎么解决&#xff1f;你的“强”&#xff08;数据增强&#xff09;来了~ 数据增强作为一种正则化技术&#xff0c;可以帮助我们在有限的数据下&#xff0c;提高模型的性能。…

Vue.js魔法书:前端开发者的终极指南----指令篇续篇

​个人名片&#xff1a; &#x1f60a;作者简介&#xff1a;一个为了让更多人看见许舒雅的宝贝的小白先生 &#x1f921;个人主页&#xff1a;&#x1f517; 许舒雅的宝贝 &#x1f43c;座右铭&#xff1a;深夜两点半的夜灯依旧闪烁&#xff0c;凌晨四点的闹钟不止你一个。 &am…

linux 操作系统下的dhclient命令介绍和案例使用

linux 操作系统下的dhclient命令介绍和案例使用 dhclient 是 Linux 系统中用于动态主机配置协议&#xff08;DHCP&#xff09;客户端的命令。它的主要功能是从 DHCP 服务器获取网络配置&#xff0c;包括 IP 地址、子网掩码、默认网关和 DNS 服务器等信息 dhclient 命令概述 …

如何使用ssm实现校园二手交易平台的设计与开发+vue

TOC ssm641校园二手交易平台的设计与开发vue 研究背景与现状 时代的进步使人们的生活实现了部分自动化&#xff0c;由最初的全手动办公已转向手动自动相结合的方式。比如各种办公系统、智能电子电器的出现&#xff0c;都为人们生活的享受提供帮助。采用新型的自动化方式可以…

速通汇编(六)认识栈,SS、SP寄存器,push和pop指令的作用

一&#xff0c;栈 &#xff08;一&#xff09;栈的特点 栈是一种具有特殊访问方式的存储空间&#xff0c;特殊在于&#xff0c;进出这块存储空间的数据&#xff0c;“先进后出&#xff0c;后进先出” 由于栈的这个“先进后出”的特点&#xff0c;我们可以利用其来很好的操作内…

传输层协议 —— TCP协议(上篇)

目录 1.认识TCP 2.TCP协议段格式 3.可靠性保证的机制 确认应答机制 超时重传机制 连接管理机制 三次握手 四次挥手 1.认识TCP 在网络通信模型中&#xff0c;传输层有两个经典的协议&#xff0c;分别是UDP协议和TCP协议。其中TCP协议全称为传输控制协议&#xff08;Tra…

Java毕业设计 基于SpringBoot和Vue自习室管理系统

Java毕业设计 基于SpringBoot和Vue自习室管理系统 这篇博文将介绍一个基于SpringBoot框架和Vue开发的自习室管理系统&#xff0c;适合用于Java毕业设计。 功能介绍 学生 登录 个人中心 修改密码 系统首页 自习室浏览 学生预约记录 管理员  登录 个人中心 修改密码 系统…

零信任安全架构--持续验证

随着网络安全威胁的不断演变&#xff0c;传统的“信任但验证”安全模式已无法应对现代复杂的攻击。零信任安全架构&#xff08;Zero Trust Architecture, ZTA&#xff09;应运而生&#xff0c;作为一种全新的安全理念&#xff0c;它彻底改变了企业的网络安全防护方式。核心思想…