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

news/2024/11/15 16:22:13/文章来源:https://www.cnblogs.com/fylh/p/18548163

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

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

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

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

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

  • COPY 指令:将主机的文件或目录复制到镜像的指定路径。
  • ADD 指令:除了 COPY 的功能外,还支持复制远程文件(如 URL)并自动解压压缩文件(如 .tar)。
示例
# 从主机的工作目录将文件复制到镜像的 /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

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

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

此时就需要用docker run使用镜像启动容器,然后再利用docker cp复制到本地

三、适合场景的选择

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

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

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

四、注意事项

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

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

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

js 日期遍历 小算法

js 日期遍历 小算法给一个完整月份日期 list ,怎样遍历出来 类似一个月 日历呢?勉强写了一个 基于vue<table><tbody><template v-for="n in 5"><tr><template v-for="w in 7"><template v-if="(w-1)+(n-1)*7 <…

2024-2025-1 20241322《计算机基础与程序设计》第八周学习总结

2024-2025-1 20241322 《计算机基础与程序设计》第八周学习总结 作业信息这个作业属于哪个课程 https://edu.cnblogs.com/campus/besti/2024-2025-1-CFAP这个作业要求在哪里 https://www.cnblogs.com/rocedu/p/9577842.html#WEEK08这个作业的目标 功能设计与面向对象设计面向对…

echarts 画一个南丁格尔玫瑰饼图

const datas = [{name: 无信号,value: 5,label: { color: #06B7FFFF }},{name: 正常,value: 8,label: { color: #69D85DFF }},{name: 报警,value: 7,label: { color: #FA6400FF }},{name: 警告,value: 4,label: { color: #F7B500FF }} ]option = {tooltip: {trigger: item,form…

数字孪生技术:如何实现智能制造与城市管理的全新升级

在现代的数字化转型过程中,数字孪生技术成为许多行业实现智能化升级的重要推动力。而作为领先的可视化平台,山海鲸可视化通过其强大的鲸孪生组件,将数字孪生技术与可视化紧密结合,为企业和行业用户提供了一种全新的方式来管理、监控和优化复杂系统。下面我们将详细介绍山海…

【鸣潮,原神PC端启动器】仿二次元手游PC端游戏启动器,以鸣潮为例。

二游GAMELanucher启动器 1.前言许多二次元手游(原神,鸣潮,少女前线)的PC端启动器都是使用Qt做的,正好最近正在玩鸣潮,心血来潮,便仿鸣潮启动器,从头写一个。先下载一个官方版的PC启动器,找到图标,背景图等素材,然后对着界面写代码就行。效果如下2. 划分模块游戏启动…

css动态检测视口屏幕的尺寸

<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>css动态检测屏幕的视口尺寸</title><…

自定义注解进行数据脱敏

前言 有些时候,我们可能对输出的某些字段要做特殊的处理在输出到前端,比如:身份证号,电话等信息,在前端展示的时候我们需要进行脱敏处理,这时候通过自定义注解就非常的有用了。在Jackson中要自定义注解,我们可以通过@JacksonAnnotationsInside注解来实现,如下示例: 一…

openVAS安装记

项目需要使用openVAS 安装步骤 我这里使用的是Ubuntu最新版,因为Ubuntu和debian可通过官网仓库进行安装,因改名为gvm 后续直接上操作 #安装 sudo apt install gvm -y #初始化(可能时间比较长,台会去下载数据库) sudo gvm-setup# 开机自启服务 sudo systemctl enable notus-…

爆火的外卖霸王餐项目,怎么做?

微客云以下是一些做爆火的外卖霸王餐项目的方法: ### 明确项目定位与目标- **确定核心目标**:明确是为了增加新用户、提高复购率、提升品牌知名度还是收集用户反馈等,不同目标决定后续策略 。- **精准定位用户群体**:了解目标用户的消费习惯、喜好、需求及消费能力等,如上…

轮廓线DP

讲解轮廓线DP的两种常见形式以及例题。更新日志概念 类似于状态压缩DP,但我们储存的是轮廓线上的状态。 有些时候,也不需要进行状态压缩,而可以用某一点的状态代表一个区域的状态。 思路 轮廓线就是已经决策的与尚未决策的部分的分界线,我们储存分界线上已经决策过的所有节…

Nuxt.js 应用中的 schema:written 事件钩子详解

title: Nuxt.js 应用中的 schema:written 事件钩子详解 date: 2024/11/15 updated: 2024/11/15 author: cmdragon excerpt: schema:written 钩子是 Vite 提供的一种生命周期钩子,在模式写入完成后调用。通过这个钩子,开发者可以在配置被正式应用之后执行一些后续操作,比如记…

概率与期望基础

实验、结果、样本空间、事件 事件 \(A\) 是否发生取决于一系列影响它的因素,这些因素影响 \(A\) 的过程称为一次 experiment 实验 或 trial 试验 一次试验的 result 结果 称为它的 outcome 结局。\(\text{result}\) 指由原因所引起的结果 \(\text{outcome}\) 强调事件特有的结…