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
英文地址,請注明出處:http://en.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等,開發項目包括…