docker -v 之后docker cp報錯

問題

我現在在本地已經可以正確運行這個文本糾錯接口了,使用了-v 掛載,,當我使用docker cp時,報錯了Error response from daemon: unlinkat /app/pycorrector/.git/objects/pack/pack-xxxxxx.pack: device or resource busy,看樣子我不能把項目cp拷進容器了?主要我是擔心,我最終是要把這個容器打包成鏡像,然后放到另一個服務器上使用,我擔心我使用了-v 掛載,不用cp來拷進容器,最后的這個鏡像里面沒有項目文件

解決

你觀察非常準確,使用 -v 掛載方式運行的容器,項目代碼并不會被寫入鏡像,這是 Docker 的基本行為。


🧠 為什么你現在 docker cp 報錯?

你看到的報錯:

Error response from daemon: unlinkat /app/pycorrector/.git/objects/pack/pack-xxxxx.pack: device or resource busy

原因是:

🔒 你掛載了本地路徑(-v D:/XYWL/pycorrector:/app/pycorrector),容器內 /app/pycorrector 實際是你 Windows 的一個目錄映射,不是容器內部真實的目錄,不能用 docker cp 往里復制,也不能從里面打包進鏡像


? 解決方案(建議方式)

你最終的目標是把這個容器打包成鏡像帶走部署,那么請按照以下做法:


? 方法一:進入容器內部,把代碼復制到非掛載目錄

# 1. 進入你的容器
docker exec -it pycorrector-container bash# 2. 拷貝掛載目錄下的代碼到容器內其它目錄(如 /app/project)
cp -r /app/pycorrector /app/project

這樣 -v 掛載的 /app/pycorrector 是外部的,你復制到 /app/project容器內部真正存儲的路徑

然后退出容器并保存為鏡像:

docker commit pycorrector-container pycorrector:v1

? 此時新鏡像 pycorrector:v1 中就包含了 /app/project 目錄的代碼,與你外部掛載無關。


? 方法二:不使用 -v,直接構建鏡像(推薦長期用)

如果你已經完成開發階段,建議放棄 -v 掛載方式,使用 Dockerfile 構建完整鏡像。

示例 Dockerfile
FROM pytorch/pytorch:2.1.0-cuda11.8-cudnn8-devel# 安裝依賴
RUN pip install --upgrade pip
RUN pip install pycorrector fastapi uvicorn# 拷貝代碼(假設和 Dockerfile 同目錄)
COPY ./pycorrector /app/pycorrector
WORKDIR /app/pycorrector# 暴露接口端口
EXPOSE 7777# 默認啟動接口(你可以換成你自己的 api.py 路徑)
CMD ["uvicorn", "api:app", "--host", "0.0.0.0", "--port", "7777"]
構建鏡像:
docker build -t pycorrector:custom .

這樣你構建出的鏡像里就有完整代碼,無需掛載、無需 cp,部署更穩定、更干凈


? 總結

方式是否推薦是否包含代碼
-v 掛載? 不推薦打包部署用? 鏡像內無項目代碼
docker cp 到掛載目錄? 容易失敗? 掛載目錄不能被復制
? 復制到容器內部路徑再 commit?? 推薦?? 會被打包進鏡像
? 使用 Dockerfile 構建鏡像?最推薦?? 完全控制環境和代碼

如果你愿意,我可以根據你的代碼目錄結構,為你生成一個完整的 Dockerfile 和部署腳本。只需要你告訴我:
📁 你項目的主目錄結構(比如 api.py 在哪、模型要不要下載等)。是否需要我協助生成?

追問

非常好,你的思路完全沒問題!

你當前的情況是:

  • ? 容器已經運行中(用了 -v 掛載);
  • ? 容器內部你已經做了很多工作(裝了依賴、修改了代碼等);
  • ? 不想重新用 Dockerfile 構建;
  • ? 不想失去已經做的工作;
  • ? 最終目標是:把完整項目打包進一個鏡像,方便遷移到別的服務器上使用(不用掛載)。

? 解決方案(保留當前容器工作 + 打包為完整鏡像)

你可以 復制掛載目錄下的代碼到容器內部真實目錄,然后 docker commit 打包。


? 1. 進入你的容器

docker exec -it pycorrector-container bash

? 2. 在容器內復制代碼(從掛載目錄 → 容器真實目錄)

mkdir -p /opt/pycorrector
cp -r /app/pycorrector/* /opt/pycorrector/

解釋:

  • /app/pycorrector 是你通過 -v 映射進來的掛載目錄(外部 Windows 項目);
  • /opt/pycorrector 是容器內部的一個真實目錄;
  • 拷貝后,/opt/pycorrector 是獨立于掛載的,可以被 commit 成鏡像的一部分

你也可以檢查一下復制后文件是否都在:

ls /opt/pycorrector

? 3. 退出容器

exit

? 4. 提交為新鏡像(保存當前容器所有狀態)

docker commit pycorrector-container pycorrector:with-code

這一步會將:

  • 所有你安裝的 Python 包
  • 所有環境變量和模型緩存
  • 剛才復制進去的 /opt/pycorrector 項目代碼

都一起保存為一個叫 pycorrector:with-code 的鏡像。


? 5. 測試新鏡像(確認沒問題)

docker run -it --gpus all --name pycorrector-test pycorrector:with-code bash

然后在里面運行你項目的代碼:

cd /opt/pycorrector
python api.py

確認 FastAPI 接口或其它功能正常。


? 6. 導出鏡像(可帶到其他服務器)

docker save -o pycorrector_with_code.tar pycorrector:with-code

把這個 .tar 文件拷到目標服務器后導入:

docker load -i pycorrector_with_code.tar

? 總結操作流程

步驟命令說明
進入容器docker exec -it xxx bash進入你掛載的容器
拷貝代碼cp -r /app/xxx /opt/xxx復制掛載目錄的代碼
打包鏡像docker commit xxx new-image把當前容器保存為鏡像
導出鏡像docker save -o xxx.tar保存成文件
導入鏡像docker load -i xxx.tar新服務器導入鏡像

如果你愿意,我可以繼續幫你寫一條命令,把這些操作簡化成一行命令腳本,是否需要?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/85512.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/85512.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/85512.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

10人團隊SolidWorks云桌面服務器怎么連接

在當今數字化設計領域,SolidWorks作為主流的三維CAD軟件,對硬件性能要求較高。 對于10人團隊共享使用場景,云桌面服務器方案能有效解決硬件成本高、協作效率低等問題,這需從硬件選型、網絡架構、云桌面平臺部署、軟件授權管理及用…

從源碼角度了解Elasticsaerch(分布式協調排序、深分頁問題)

引文 Elasticsearch基于Lucene所以很多系統實現都在其中,所以可以先看看Lucene的實現: https://blog.csdn.net/qq_35040959/article/details/147931034 項目組件 不像Kafka這種頂級項目核心性能組件全自己實現,ELK中有很多引用至第三方開放庫; 網絡模型-Netty 網絡模型多重…

共讀AI新圣經-深度學習讀書筆記01

提示:本文是我參加datawhale活動的讀書筆記,這是第一章的閱讀筆記 文章目錄 前言一、深度學習能做什么?二、教學案例總結 前言 隨著大數據和算力的大幅提升,基于數據學習的解決方案正取代基于人工設計的解決方案 提示&#xff1a…

Android項目資源字符串內容多語言對齊工具 Python

Android項目資源字符串內容多語言對齊工具: #!/usr/bin/env python3import re from dataclasses import dataclass, field from typing import Optional, Dict, List from pathlib import Path import tkinter as tk from tkinter import filedialog, messageboxda…

創客匠人分享:知識變現時代的創始人 IP 打造路徑

當知識付費市場規模突破千億,創始人 IP 已成為知識變現的 “流量引擎”。創客匠人結合陳雷教授的實戰經驗,拆解創始人 IP 從 0 到 1 的打造路徑,為內容創業者提供從流量引流到商業變現的全鏈路思路。 一、破局認知:IP 打造的核心…

【數據分析五:Feature Engineering】特征工程

一、特征工程定義 在數據預處理以后(或者數據預處理過程中),如何從數據中提取有效的特征,使這些特征能夠盡可能的表達原始數據中的信息,使得后續建立的數據模型能達到更好的效果,就是特征工程所要做的工作…

標桿確立!永洪科技位于IDC報告Data Analytics領域象限排頭位!

近日,全球知名市場研究機構IDC發布的《數據管理分析與生成式AI發展趨勢及最佳實踐》報告,為正處于數字化轉型深水區的企業描繪了清晰的技術演進藍圖。在這幅權威繪制的產業圖譜中,“Data Analytics”(數據分析)作為連接…

啟動tomcat控制臺日志出現亂碼

當我們啟動tomcat控制臺日志出現亂碼怎么辦? 解決方案: 在tomcat根目錄中config文件夾下將log.properties文件中將默認控制臺日志輸出編碼UTF修改成GBK或者GB2312都可以。 java.util.logging.ConsoleHandler.encoding UTF-8 修改為: j…

【橘子的AI | 每日一課】Day4!機器學習 (ML) 基礎

機器學習 (ML) 基礎介紹 一、機器學習的定義 從廣義上來說,機器學習是一種能夠賦予機器學習的能力以此讓它完成直接編程無法完成的功能的方法。但從實踐的意義上來說,機器學習是一種通過利用數據,訓練出模型,然后使用模型預測的…

【C語言】藥店藥品管理系統 -丨完整源碼與實現解析

系統概述 這是一個功能完善的藥店藥品管理系統,使用C語言開發,基于鏈表數據結構實現。系統提供藥品信息的增刪改查、排序和持久化存儲功能,適用于藥店日常藥品管理工作。 數據結構設計 #define MAX_NAME_LEN 50 #define MAX_ID_LEN 20 #de…

sass-loader與webpack版本沖突解決方案

#npm i 錯誤解決記錄# 最開始錯誤 :拉取代碼,增加依賴時,報錯 問題: 在安裝sass-loader10.1.1時,發現與現有的webpack版本有沖突。 當前項目已經安裝了webpack4.28.4(通過peer dependency requirements f…

常見誤區解讀之三:超融合只適合外圍/輕量業務場景,無法承載數據庫等關鍵業務?

作者:SmartX 金融團隊 祝志剛 在前兩期“超融合常見誤區解讀”中,我們分別解讀了如何以超融合建云并進行大規模部署。而對于生產業務場景,部分行業用戶和業界人士可能還會有這樣的認知: “超融合管理簡單、成本也低,…

Kafka重平衡機制深度解析:原理、觸發條件與應對策略

引言 在Kafka分布式消息系統中,重平衡(Rebalance)是一個至關重要的機制,它確保消費者組中的各個消費者實例能夠公平地分擔主題分區的消費任務。然而,重平衡過程也可能帶來短暫的消費停頓和性能波動,處理不…

使用 Docker Compose 安裝 Milvus(單機版)

1. 創建專用目錄并進入 mkdir milvus-standalone && cd milvus-standalone 2. 下載 docker-compose.yml 文件 使用官方提供的配置文件(以 Milvus v2.3.3 為例): wget https://github.com/milvus-io/milvus/releases/download/v2.3…

【MySQL篇05】:事務的 ACID 性(數據庫原理篇)

文章目錄 一、事務的ACID特性二、數據庫原理例題與 ACID 特性判斷三、拓展(undolog 與 redolog) 一、事務的ACID特性 綜述: 原子性(Atomicity):事務是不可分割的最小操作單元,要么全部成功&…

crawl4ai 框架的入門講解和實戰指南——基于Python的智能爬蟲框架,集成AI(如NLP/OCR)實現自動化數據采集與處理

一、crawl4ai 框架簡介 1. 框架定位 核心功能:基于Python的智能爬蟲框架,集成AI(如NLP/OCR)實現自動化數據采集與處理 關鍵特性: 零配置快速啟動(自動識別網頁結構) 內置反反爬機制&#xff…

受夠垃圾翻譯!CodeBuddy 8 分鐘造神器,劃詞秒翻 + 自動適配所有網頁

本文所使用的 CodeBuddy 免費下載鏈接:騰訊云代碼助手 CodeBuddy - AI 時代的智能編程伙伴 前言 作為一個天天泡在 GitHub 上扒項目的人,翻譯問題簡直是我 “挖寶” 路上的頭號絆腳石!想研究國外大神的優質開源項目,不是被機翻軟…

零基礎設計模式——總結與進階 - 2. 反模式

第五部分:總結與進階 - 2. 反模式 (Anti-Patterns) 在軟件開發中,我們追求良好的設計模式以構建健壯、可維護的系統。然而,同樣存在一些常見的、導致不良后果的解決方案,這些被稱為“反模式”。理解反模式,可以幫助我…

音視頻流媒體高級開發-學習路線

原文作者:Linux 原文鏈接:音視頻流媒體高級開發-學習路線 如果你想往音視頻方向發展,那么本文一定要認真閱讀~ 大家都知道音視頻開發薪資高、門檻高、發展空間大,心里蠢蠢欲動,卻不知道怎么入門,怎么進階…

LINUX 通過rsync同步 免密備份

1,增加免密碼用戶密碼 useradd backup echo "5566777" | passwd --stdin backup echo "backup ALL(ALL) ALL" >> /etc/sudoers # 源服務器操作 ssh client_usersource_server ssh-keygen -t rsa # 一路回車 ssh-copy-id serv…