首页 > 其他分享 >主机和Docker容器之间的文件互传方法

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

时间:2024-11-15 16:07:28浏览次数:1  
标签:文件 容器 主机 互传 path 镜像 Docker docker

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哦

标签:文件,容器,主机,互传,path,镜像,Docker,docker
From: https://www.cnblogs.com/fylh/p/18548163

相关文章

  • VirtualBox实现宿主机和虚拟机之间网络的通讯方式
    环境:宿主机操作系统Windows11虚拟机软件VirtualBox链接:https://www.virtualbox.org/wiki/Downloads虚拟机操作系统最新Linux7.1清华镜像:https://mirrors.tuna.tsinghua.edu.cn/virtualbox/VirtualBox的提供了四种网络接入模式,它们分别是:1、NAT网络地址转换模式(N......
  • 一种实现docker容器嵌套的方法
    【背景】   有个用户需要在docker容器中再运行一个容器,实现容器嵌套,研究了下,可以这样来实现。 【方法】1.在系统上先安装一个docker服务,我的版本是20.10.17[root@testkvm~]#rpm-qa|grepdockerdocker-ce-20.10.17-3.el7.x86_64docker-ce-cli-20.10.17-3.el7.......
  • dockerfile中cmd和entrypoint的区别
    cmd语法TheCMDinstructionhasthreeforms:CMD["executable","param1","param2"](execform,thisisthepreferredform)CMD["param1","param2"](asdefaultparameterstoENTRYPOINT)CMDcommandparam1par......
  • 5分钟上手 Docker:镜像优化
    Docker是一种流行的容器化技术,它允许开发者将应用程序及其所有依赖打包成一个标准化的单元——镜像。优化Docker镜像不仅能减小镜像的体积,提高下载和部署速度,还能增强安全性。在本文中,我们将介绍一些镜像优化的技巧,帮助你在5分钟内快速上手Docker镜像的优化。1.使用合适......
  • 搭建本地docker私服库
    1、本地镜像发布到私有库1.1、Docker Registry是什么1官方DockerHub地址:https://hub.docker.com/,中国大陆访问太慢了且准备被阿里云取代的趋势,不太主流。2Dockerhub、阿里云这样的公共镜像仓库可能不太方便,涉及机密的公司不可能提供镜像给公网,所以需要创建一个本地私人......
  • docker compose网络
    基本概念默认情况下,Compose会为我们的应用创建一个网络,服务的每个容器都会加入该网络中。这样,容器就可被该网络中的其他容器访问,不仅如此,该容器还能以服务名称作为hostname被其他容器访问。默认情况下,应用程序的网络名称基于Compose的工程名称,而项目名称基于docker-compose.yml......
  • Docker && Kubernetes
     Docker镜像与容器Docker中有两个重要概念。一个是容器(Container):容器特别像一个虚拟机,容器中运行着一个完整的操作系统。可以在容器中装Nodejs,可以执行npminstall,可以做一切你当前操作系统能做的事情另一个是镜像(Image):镜像是一个文件,它是用来创建容器的。如果你有装过......
  • 该网站因主机过期暂时无法访问
    检查域名解析设置登录您的域名管理平台。检查DNS解析记录,确保A记录指向的是当前有效的新主机IP地址。如果有指向旧主机的A记录,请删除或更新这些记录。确认主机状态登录您的云服务提供商控制台。确认新主机是否已经成功开通并处于运行状态。检查是否有任何未完成的配......
  • 提问:如何实现,我在docker container中,curl localhost:11434时,实际访问的是宿主机的1143
    背景我们需要在dify中配置ollama。ollama服务起来之后,会把服务挂在localhost的11434上。但是,我的dify一般是在docker里起的。所以我在dockercontainer里,访问localhost:11434时,实际无法访问到宿主机的11434,也就没办法调用宿主机上的ollama。怎么解决?方法一:找到宿主机......
  • centOS7 docker 安装步骤
    一、安装前检查工作:1.检查/etc/yum.repos.d/CentOS-Base.repo文件是否存在,如果不存在,从网络仓库中复制一份新的CentOS-Base.repo文件。sudocurl-o/etc/yum.repos.d/CentOS-Base.repohttp://mirrors.aliyun.com/repo/Centos-7.repo或者使用wget:sudowget-O/etc/yum.r......