Docker 容器传输文件的常用方法

Docker 容器传输文件的常用方法

在 Docker 日常使用中,经常需要在主机与容器之间传输文件(如配置文件、代码包、日志等)。以下是四种最常用的实现方式,覆盖临时传输、持久共享、构建集成等不同场景。

1. 使用 docker cp 命令(最常用,临时传输)

docker cp 是 Docker 官方提供的原生命令,专门用于主机与容器之间直接复制文件 / 目录,无需额外配置,适合临时传输场景。

核心语法

操作方向命令格式
主机 → 容器docker cp 主机源路径 容器名/ID:容器目标路径
容器 → 主机docker cp 容器名/ID:容器源路径 主机目标路径

示例

  1. 主机文件复制到容器
    将主机当前目录下的 app.js 文件,复制到名为 my-container 的容器内 /tmp 目录:

    bash

    docker cp ./app.js my-container:/tmp/
    
  2. 主机目录复制到容器
    将主机 ./project 目录,复制到容器 /usr/local/project 目录(目录会自动创建):

    bash

    docker cp ./project my-container:/usr/local/
    
  3. 容器文件复制到主机
    将容器内 /var/log/app.log 日志文件,复制到主机 ./logs 目录:

    bash

    docker cp my-container:/var/log/app.log ./logs/
    

2. 利用 Docker 卷(Volume)(持久化共享)

如果需要主机与容器长期、实时共享文件(如数据库数据、配置文件动态更新),推荐使用 Docker 卷(Volume)。卷是 Docker 管理的持久化存储,独立于容器生命周期,数据安全性更高。

操作步骤

  1. 创建自定义卷

    bash

    docker volume create my-volume  # 创建名为 my-volume 的卷
    
  2. 运行容器时挂载卷
    将卷 my-volume 挂载到容器内的 /container/data 路径,主机与容器在此路径下的文件会实时同步:

    bash

    docker run -d \--name my-container \-v my-volume:/container/data  # 卷挂载:卷名:容器内路径my-image  # 容器使用的镜像
    
  3. 主机访问卷数据
    Docker 卷在主机上的默认存储路径为 /var/lib/docker/volumes/[卷名]/_data,可直接在主机操作该目录:

    bash

    # 例如:向卷中添加文件,容器内 /container/data 会同步
    cp ./config.ini /var/lib/docker/volumes/my-volume/_data/
    

3. 通过 Dockerfile 构建时添加(镜像集成)

如果需要容器创建时就内置固定文件(如应用代码、默认配置),可在 Dockerfile 中使用 COPYADD 指令,将文件打包到镜像中,容器启动后直接可用。

核心指令对比

指令功能说明推荐场景
COPY仅将主机本地文件 / 目录复制到镜像中,语法简单,功能明确。绝大多数本地文件复制场景
ADDCOPY 功能外,还支持解压压缩包(如 .tar)、下载 URL 资源。需要自动解压或远程获取文件

示例 Dockerfile

dockerfile

# 基础镜像
FROM ubuntu:22.04# 1. 使用 COPY 复制本地文件到镜像
COPY ./app.conf /etc/app.conf  # 主机 app.conf → 镜像 /etc/ 目录# 2. 使用 COPY 复制本地目录到镜像
COPY ./src /usr/local/app/src  # 主机 src 目录 → 镜像 /usr/local/app/src# 3. 使用 ADD 解压本地压缩包(自动解压到目标路径)
ADD ./app.tar.gz /usr/local/app/  # 主机 app.tar.gz → 镜像内自动解压到 /usr/local/app/# 4. 使用 ADD 下载远程文件(不推荐,建议在主机下载后用 COPY,避免构建缓存问题)
# ADD https://example.com/config.ini /etc/config.ini

构建镜像并运行

bash

# 构建镜像(当前目录需包含 Dockerfile 和待复制的文件)
docker build -t my-image:v1 .# 运行容器(镜像内已包含上述文件)
docker run -it --name my-container my-image:v1

4. 网络传输工具(跨主机 / 特殊场景)

如果容器内已安装网络工具(如 wgetcurlssh),可通过网络实现文件传输,适合跨主机或无法直接访问容器的场景

常见场景示例

  1. 从主机 HTTP 服务下载文件
    先在主机启动临时 HTTP 服务(以 Python 为例):

    bash

    # 主机当前目录启动 HTTP 服务(端口 8000)
    python3 -m http.server 8000
    

    然后在容器内使用 wget 下载文件:

    bash

    # 容器内下载主机的 app.zip 文件(主机 IP 需替换为实际地址)
    wget http://192.168.1.100:8000/app.zip -O /tmp/app.zip
    
  2. 通过 SSH 传输文件
    若容器内已配置 SSH 服务,可使用 scp 从主机复制文件:

    bash

    # 主机 → 容器(容器需开放 SSH 端口,如 2222)
    scp -P 2222 ./config.ini root@容器IP:/etc/config.ini
    

方法选择建议

场景需求推荐方法优点
临时、少量文件传输docker cp无需配置,操作简单
长期、实时文件共享Docker 卷数据持久化,性能稳定
容器镜像内置固定文件Dockerfile COPY与镜像绑定,部署便捷
跨主机或远程传输网络工具(wget)灵活性高,不受本地环境限制

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

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

相关文章

视频转音频在线工具大比拼,哪家体验更胜一筹?

最近工作上遇到了个挺有意思的需求,需要从几个教学视频里提取出音频内容,方便做成播客形式,让学员能随时随地学习。一开始,我以为这活儿挺简单的,不就是把视频里的声音单独弄出来嘛,结果一上手才发现&#…

KafKa02:Kafka配置文件server.properties介绍

一、配置文件位置二、配置文件介绍默认下:9092 是处理消息队列核心业务(客户端与 broker 交互)的端口9093 是集群内部控制器通信的端口# 指定节点角色,这里同时作为 broker(消息代理)和 controller&#xf…

哈尔滨云前沿服务器租用托管

黑龙江前沿数据,始建于2005年,多年的历史,专业从事域名注册,虚拟主机,服务器租用,云主机,网站建设等互联网服务。电信/联通/双线/机房/众多机房供您选择,总有一个适合您的服务器&…

Qt开发经验 --- Qt 修改控件样式的方式(16)

文章目录[toc]1 概述2 Qt Style Sheets (QSS)3 使用 QStyle 和 QProxyStyle4 设置 Palette (调色板)5 使用预定义的 QStyle6 直接设置控件属性7 自定义控件绘制更多精彩内容👉内容导航 👈👉Qt开发经验 👈1 概述 Qt 提供了多种修改…

Vue3》》Svg图标 封装和使用

SVG 安装插件 npm i vite-plugin-svg-icons // vite.config.ts import { defineConfig } from vite import vue from vitejs/plugin-vue import { createSvgIconsPlugin } from vite-plugin-svg-icons import { resolve } from path export default defineConfig({//配置路径别…

【04】AI辅助编程完整的安卓二次商业实战-寻找修改替换新UI首页图标-菜单图标-消息列表图标-优雅草伊凡

【04】AI辅助编程完整的安卓二次商业实战-寻找修改替换新UI首页图标-菜单图标-消息列表图标-优雅草伊凡引言本次二开布局没有变,但是下一次整体布局会有变,不过本次开发发现朋友圈跳转功能的流程步骤也做了一定的变化。原生项目复杂就复杂于就算一个颜色…

龙蜥8.10中spark各种集群及单机模式的搭建spark3.5.6(基于hadoop3.3.6集群)

先说最终的访问端口,如我这里ip为172.20.94.37、172.20.94.38、172.20.94.39,主机名分别为:hadoop37、hadoop38、hadoop39. 最终访问(默认端口): hadoop webui 172.20.94.37:9870 hdfs 端口 8020 yarn 172.…

关于我重新学习 react 的第一遍

今天是25年9月11号,很久很久没有学习前端知识了,坦诚来说还清楚记得在大学里因为前端技术第一次获奖的心情,也清晰记得写完第一篇博客后的心情,工作和运动给我最大程度的成就感。 打破自己 重新开始 完全地 版本一 25.9.11 文章目…

第2课:Agent系统架构与设计模式

第2课:Agent系统架构与设计模式 课程目标 理解Agent的基本概念和特性掌握多Agent系统的设计模式学习Agent通信协议和消息传递实践创建简单的Agent框架 课程内容 2.1 Agent基础概念 什么是Agent? Agent是一个具有自主性、反应性、社会性和主动性的计…

Day42 51单片机中断系统与8×8 LED点阵扫描显示

day42 51单片机中断系统与88 LED点阵扫描显示一、51单片机引脚位操作 —— sbit 关键字 作用 sbit 是专用于 51 单片机架构的 C 语言扩展关键字,用于定义特殊功能寄存器(SFR)中的某一位,从而实现对单个 I/O 引脚的直接位操作。 示…

差分: 模板+题目

题目:【模板】差分 应用场景:快速解决将某一个区间所有元素加上 “一个数” 的操作。 第一步,预处理差分数组。 f[i] 表示:当前元素与前一个元素的差值 a[i] - a[i-1]; 但在题目中,我们其实可以不用到a[]这个数组…

GD32 Timer+ADC多通道+DMA+PWM调试记录

本例记录使用GD32307C开发板,实现以内部Timer1 CH1为触发源,触发ADC0的两个通道,进行并行非连续采样,病通过DMA传输采样结果。同时输出PWM,用来检测Timer1 CH1的触发周期。下面介绍具体实现过程:1. gpio初始…

阻塞 IO为什么叫BIO,非阻塞IO为什么叫NIO,异步IO为什么叫AIO

IOIO的核心就是数据传输,也就是程序与外部设备之间进行传输,通过IO的核心可以分为,文件IO和网络IO文件IO交互的对象就是本地存储设备,比方说读写本地文件。网络IO交互的对象就是网络设备,核心的应用场景就是网络通信。…

10分钟了解什么是多模态大模型

10分钟了解什么是多模态大模型(MM-LLMs) 1. 什么是多模态 Multimodality 多模态(Multimodality)是指集成和处理两种或两种以上不同类型的信息或数据的方法和技术。在机器学习和人工智能领域,多模态涉及的数据类型通常…

通过DSL生成Jenkins流水线

代码化管理 Jenkins 流水线(Infrastructure as Code) 版本控制:DSL 脚本可以像代码一样存入 Git、GitLab 等版本控制系统,所有任务配置的变更都有提交记录,便于追溯历史、回滚错误。协作效率:团队成员可以通…

信号量主要API及综合应用

1.信号量概述信号量是一个底层核心模块【int】类型变量,记录当前信号量数据。信号量 P 操作 (sem_wait)线程检测对应信号量底层 int 数据数值,如果大于 0,当前线程获得 CPU 执行权,同时将信号量底层 int 数据-1 操作。如果底层数据…

工业自动化领域的“超级跑车”:西门子TDC系统深度解析与实战架构

工业自动化领域的“超级跑车”:西门子TDC系统深度解析与实战架构 文章目录 工业自动化领域的“超级跑车”:西门子TDC系统深度解析与实战架构引言:当普通PLC遇到性能瓶颈第一章:认识TDC——它不是简单的“大型PLC”1.1 TDC究竟是什…

MySQL高阶查询语句与视图实战指南

MySQL高阶查询语句与视图实战指南 文章目录MySQL高阶查询语句与视图实战指南一、常用高阶查询技巧1. 按关键字排序(ORDER BY)基础用法进阶用法:多字段排序条件过滤2. 区间判断与去重(AND/OR DISTINCT)区间判断&#x…

解决Pytest参数化测试中文显示乱码问题:两种高效方法

在使用Pytest进行参数化测试时,许多开发者都会遇到一个常见但令人头疼的问题:当测试用例的ids参数包含中文字符时,控制台输出会出现乱码。这不仅影响了测试报告的可读性,也给测试结果的分析带来了困难。本文将深入探讨这个问题&am…

基于SpringBoot的校园流浪动物救助平台【spring boot实战项目、Java毕设、Java项目、Java实战】

💖💖作者:计算机毕业设计小途 💙💙个人简介:曾长期从事计算机专业培训教学,本人也热爱上课教学,语言擅长Java、微信小程序、Python、Golang、安卓Android等,开发项目包括…