在Docker容器中掛載主機(jī)目錄的方法
在Docker容器中掛載主機(jī)目錄的方法
技術(shù)背景
在使用Docker時(shí),有時(shí)需要將主機(jī)上的目錄掛載到容器中,以便在主機(jī)和容器之間共享數(shù)據(jù),使主機(jī)上的更新能實(shí)時(shí)反映到容器中。但不同的操作系統(tǒng)和Docker版本在掛載目錄時(shí)可能會(huì)有不同的方法和注意事項(xiàng)。
實(shí)現(xiàn)步驟
使用ADD命令(不推薦用于實(shí)時(shí)更新場(chǎng)景)
可以在Dockerfile中使用ADD命令將主機(jī)目錄復(fù)制到容器中,但這種方式在構(gòu)建容器后,主機(jī)目錄的更改不會(huì)反映到容器中。
ADD . /path/inside/docker/container
使用-v選項(xiàng)(適用于大多數(shù)場(chǎng)景)
在運(yùn)行容器時(shí)使用-v選項(xiàng)可以將主機(jī)目錄掛載到容器中。以下是不同操作系統(tǒng)的示例:
- Linux/Mac
docker run -t -i -v <host_dir>:<container_dir> ubuntu /bin/bash
例如,將主機(jī)的/tmp目錄掛載到容器的/tmp目錄:
docker run -t -i -v /tmp:/tmp ubuntu /bin/bash
- Windows 10
docker run -it -p 12001:80 -v c:\Users\C\Desktop\dockerStorage:/root/sketches
注意要確保主機(jī)驅(qū)動(dòng)器已共享。也可以使用以下格式:
docker run -it -p 12001:80 -v //c/Users/C/Desktop/dockerStorage:/root/sketches <your-image-here> /bin/bash
使用--mount選項(xiàng)(Docker 17.06及以上版本)
--mount選項(xiàng)的語(yǔ)法更詳細(xì),鍵值對(duì)的順序不重要,且值更容易理解。
docker run -it --mount src="$(pwd)",target=/test_container,type=bind k3_s3
如果掛載參數(shù)沒有空格,也可以使用反引號(hào):
docker run -it --mount src=`pwd`,target=/test_container,type=bind k3_s3
對(duì)于使用boot2docker或docker-machine的情況
如果在Mac上使用boot2docker,可能需要進(jìn)行兩次掛載:
- 將主機(jī)目錄掛載到
boot2docker:
sudo mount -t vboxsf hostfolder /boot2dockerfolder
- 將
boot2docker目錄掛載到容器:
docker run -v /boot2dockerfolder:/root/containerfolder -i -t imagename
使用docker-compose
在docker-compose.yaml文件中也可以進(jìn)行目錄掛載:
version: '2'
services:
cms:
image: <IMAGE>:<TAG>
ports:
- <LOCAL_PORT>:<CONTAINER_PORT>
volumes:
- <LOCAL_PATH>:<CONTAINER_PATH>
例如:
version: '2'
services:
cms:
image: ghost-cms:latest
ports:
- 8080:8080
volumes:
- /volume-to-mount:/mnt
然后運(yùn)行:
docker-compose -f docker-compose.yaml up -d
核心代碼
以下是一些常見的掛載命令示例:
# 使用 -v 選項(xiàng)掛載
docker run -t -i -v /tmp:/tmp ubuntu /bin/bash
# 使用 --mount 選項(xiàng)掛載
docker run -it --mount src="$(pwd)",target=/test_container,type=bind k3_s3
# 在 docker-compose.yaml 中掛載
version: '2'
services:
app:
image: your-image:tag
volumes:
- ./host-dir:/container-dir
最佳實(shí)踐
- 使用絕對(duì)路徑:在掛載時(shí)盡量使用絕對(duì)路徑,避免使用相對(duì)路徑,以確保掛載的準(zhǔn)確性。
- 權(quán)限管理:要注意掛載目錄的權(quán)限問題,確保容器內(nèi)的進(jìn)程有足夠的權(quán)限訪問掛載的目錄。
- 開發(fā)環(huán)境使用:在開發(fā)環(huán)境中,使用目錄掛載可以方便地進(jìn)行代碼調(diào)試和更新,避免頻繁重建容器。
常見問題
- 在Mac上使用
boot2docker掛載后看不到內(nèi)容:可能是因?yàn)閽燧d的是boot2docker的目錄而不是主機(jī)目錄,需要進(jìn)行兩次掛載。 - Windows上掛載失敗:要確保主機(jī)驅(qū)動(dòng)器已共享,并且使用正確的路徑格式(如使用雙斜杠)。
- 無法在容器中更新文件:檢查掛載目錄的權(quán)限,確保容器內(nèi)的進(jìn)程有讀寫權(quán)限。
- 掛載的目錄為空:可能是路徑錯(cuò)誤或Docker配置問題,檢查路徑是否正確,以及是否需要在Docker設(shè)置中共享驅(qū)動(dòng)器。
以上就是在Docker容器中掛載主機(jī)目錄的方法的詳細(xì)內(nèi)容,更多關(guān)于Docker掛載主機(jī)目錄的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
docker5 全功能harbor倉(cāng)庫(kù)搭建過程
Harbor是構(gòu)建企業(yè)級(jí)私有docker鏡像的倉(cāng)庫(kù)的開源解決方案,本文給大家分享docker5 全功能harbor倉(cāng)庫(kù)搭建過程,感興趣的朋友一起看看吧2021-06-06
Docker化Spring Boot應(yīng)用的實(shí)踐
本文主要介紹了Docker化Spring Boot應(yīng)用的實(shí)踐,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-06-06
docker容器狀態(tài)的轉(zhuǎn)換實(shí)現(xiàn)
這篇文章主要介紹了docker容器狀態(tài)的轉(zhuǎn)換實(shí)現(xiàn),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-11-11
Docker部署前后端分離項(xiàng)目的實(shí)現(xiàn)示例
本文主要介紹了Docker部署前后端分離項(xiàng)目的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-11-11
Docker volume 掛載卷的實(shí)現(xiàn)方法
這篇文章主要介紹了Docker volume 掛載卷的實(shí)現(xiàn)方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2019-03-03
Docker部署RabbitMQ的實(shí)現(xiàn)方法(圖文并茂)
本文詳細(xì)介紹了如何使用Docker部署RabbitMQ的步驟,包括拉取RabbitMQ鏡像,創(chuàng)建與授權(quán)文件夾,創(chuàng)建RabbitMQ容器,查看啟動(dòng)日志,訪問控制臺(tái)和登錄等,全程詳細(xì)的參數(shù)解釋和操作步驟,讓Docker部署RabbitMQ變得簡(jiǎn)單易行2024-10-10
Windows安裝docker-desktop的詳細(xì)步驟
這篇文章主要介紹了Windows安裝docker-desktop的詳細(xì)步驟,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧2024-03-03

