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

