Docker run命令掛載本地兩個目錄到容器內(nèi)的詳細(xì)教學(xué)
docker run 掛載多個本地目錄/文件到容器內(nèi)的核心規(guī)則是:多次使用 -v 參數(shù),每個 -v 對應(yīng)一組「本地路徑:容器內(nèi)路徑」的映射關(guān)系,參數(shù)順序無要求,可根據(jù)需求任意排列,適配所有Docker鏡像(含你的Label Studio)。
一、通用標(biāo)準(zhǔn)寫法(核心格式)
docker run [其他參數(shù)(-d/-p/--name等)] \
-v 本地目錄1的路徑:容器內(nèi)目標(biāo)目錄1的路徑 \
-v 本地目錄2的路徑:容器內(nèi)目標(biāo)目錄2的路徑 \
鏡像名:標(biāo)簽
關(guān)鍵說明:
- 每個
-v獨立配置一個掛載關(guān)系,無數(shù)量限制(可掛載2個、3個及以上); - 本地路徑支持相對路徑(
$(pwd)/xxx,推薦,代表當(dāng)前終端目錄下的xxx)和絕對路徑(/root/xxx); - 容器內(nèi)路徑需寫絕對路徑,且建議和程序?qū)嶋H需要的路徑一致(如Label Studio的固定路徑);
\是換行符,僅為命令可讀性,也可將所有參數(shù)寫在一行(無\)。
二、貼合你的需求:Label Studio 掛載兩個本地目錄實操示例
結(jié)合你一直操作的Label Studio容器,以「本地mydata/db掛載到容器數(shù)據(jù)庫目錄、本地mydata/annotations掛載到容器標(biāo)注數(shù)據(jù)目錄」為例(按需自定義本地/容器路徑),搭配后臺運(yùn)行、端口映射、容器命名等常用參數(shù),命令可直接復(fù)制執(zhí)行:
# 推薦:換行寫法(可讀性高,易修改) docker run -d -p 8080:8080 --name label-studio \ -v $(pwd)/mydata/db:/label-studio \ # 本地數(shù)據(jù)庫目錄 → 容器數(shù)據(jù)庫根目錄(含label_studio.sqlite3) -v $(pwd)/mydata/annotations:/label-studio/data \ # 本地標(biāo)注目錄 → 容器標(biāo)注數(shù)據(jù)目錄 heartexlabs/label-studio:latest # 簡潔:單行寫法(無換行符,直接執(zhí)行) docker run -d -p 8080:8080 --name label-studio -v $(pwd)/mydata/db:/label-studio -v $(pwd)/mydata/annotations:/label-studio/data heartexlabs/label-studio:latest
該命令實現(xiàn):
- 本地
當(dāng)前目錄/mydata/db→ 容器/label-studio(存放數(shù)據(jù)庫文件label_studio.sqlite3); - 本地
當(dāng)前目錄/mydata/annotations→ 容器/label-studio/data(存放標(biāo)注項目、數(shù)據(jù)集、標(biāo)注記錄); - 兩個目錄的數(shù)據(jù)各自獨立持久化,容器內(nèi)修改會實時同步到本地對應(yīng)目錄。
三、通用場景示例(非Label Studio,快速參考)
若為普通鏡像,需掛載本地/opt/logs(日志)和/opt/config(配置)到容器/app/logs和/app/config,命令如下:
docker run -d --name my-app \ -v /opt/logs:/app/logs \ # 本地絕對路徑1 → 容器路徑1 -v /opt/config:/app/config \ # 本地絕對路徑2 → 容器路徑2 my-image:latest
四、掛載兩個目錄的關(guān)鍵注意事項(避坑)
1.本地目錄自動創(chuàng)建:若本地指定的目錄不存在(如$(pwd)/mydata/db),Docker會自動創(chuàng)建該目錄,但可能導(dǎo)致權(quán)限問題,建議提前手動創(chuàng)建并賦權(quán):
mkdir -p $(pwd)/mydata/db $(pwd)/mydata/annotations && chmod -R 777 $(pwd)/mydata
2.路徑分隔符:Linux系統(tǒng)中本地和容器路徑均使用正斜杠 /,切勿用反斜杠 \;
3.容器內(nèi)路徑唯一性:兩個掛載的容器內(nèi)路徑不能重復(fù),否則會相互覆蓋,導(dǎo)致數(shù)據(jù)異常;
4.相對路徑必帶 $(pwd):本地相對路徑需以$(pwd)/開頭(代表當(dāng)前目錄),直接寫mydata/db會識別失??;
5.支持混合掛載:-v 可同時混合掛載目錄和單個文件(如同時掛載目錄+數(shù)據(jù)庫文件),規(guī)則不變:
# 示例:掛載目錄+單個文件(Label Studio場景) docker run -d -p 8080:8080 --name label-studio \ -v $(pwd)/mydata/annotations:/label-studio/data \ # 掛載目錄 -v $(pwd)/mydata/label_studio.sqlite3:/label-studio/label_studio.sqlite3 \ # 掛載單個文件 heartexlabs/label-studio:latest
五、驗證掛載是否成功(快速檢查)
容器啟動后,執(zhí)行以下命令查看容器內(nèi)的掛載關(guān)系,確認(rèn)兩個本地目錄均已成功映射:
# 查看容器的掛載詳情(替換為你的容器名/ID) docker inspect label-studio | grep -A 10 "Mounts"
正常輸出示例(包含兩個掛載記錄):
"Mounts": [
{
"Type": "bind",
"Source": "/root/mydata/db", # 本地實際路徑
"Destination": "/label-studio", # 容器內(nèi)路徑
"Mode": "",
"RW": true,
"Propagation": "rprivate"
},
{
"Type": "bind",
"Source": "/root/mydata/annotations", # 本地實際路徑
"Destination": "/label-studio/data", # 容器內(nèi)路徑
"Mode": "",
"RW": true,
"Propagation": "rprivate"
}
],
輸出中能看到兩個Source(本地)和Destination(容器)的對應(yīng)關(guān)系,即表示掛載成功。
核心總結(jié)
多目錄掛載核心:多次使用 -v 參數(shù),一個-v對應(yīng)一組本地-容器路徑映射;
標(biāo)準(zhǔn)格式:-v 本地路徑:容器路徑 -v 本地路徑2:容器路徑2,換行/單行均可;
Label Studio適配:結(jié)合容器固定路徑/label-studio(數(shù)據(jù)庫)和/label-studio/data(標(biāo)注數(shù)據(jù))掛載,數(shù)據(jù)可持久化;
避坑關(guān)鍵:本地路徑用$(pwd)/相對路徑或絕對路徑,容器內(nèi)路徑不重復(fù),提前創(chuàng)建本地目錄并賦權(quán)。
到此這篇關(guān)于Docker run命令掛載本地兩個目錄到容器內(nèi)的詳細(xì)教學(xué)的文章就介紹到這了,更多相關(guān)Docker run掛載本地兩個目錄到容器內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
解析docker妙用SpringBoot構(gòu)建微服務(wù)實戰(zhàn)記錄
Spring Boot 是 Spring 開源組織的子項目,是 Spring 組件一站式解決方案,本文通過詳細(xì)案例給大家解析docker妙用SpringBoot構(gòu)建微服務(wù)實戰(zhàn)記錄,感興趣的朋友跟隨小編一起看看吧2021-11-11
在docker容器中運(yùn)行flask應(yīng)用過程
這篇文章主要介紹了在docker容器中運(yùn)行flask應(yīng)用過程,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-06-06

