Docker掛載目錄失敗問題解決方法
一、問題背景
運(yùn)行鏡像生成容器時(shí)掛載目錄失敗
執(zhí)行的命令如下
sudo docker run --name tomcat-libai -it -p 8099:8080 -d -v /tomcat-libai/tomcat:/usr/local/tomcat tomcat:latest
為了方便看我們使用\換行
sudo docker run \ --name tomcat-libai \ -it \ -p 8099:8080 \ -d \ -v /tomcat-libai/tomcat:/usr/local/tomcat \ tomcat:latest
執(zhí)行命令后報(bào)錯(cuò)如下

報(bào)錯(cuò)代碼復(fù)制過來完整看一遍
docker: Error response from daemon: failed to create task for container: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: exec: "catalina.sh": executable file not found in $PATH: unknown.
大致意思就是因?yàn)槲募荒苷业街付ǖ淖兞柯窂綄?dǎo)致創(chuàng)建失敗(不知翻的對(duì)不對(duì)勿cue =_ =)
以下解決方案內(nèi)容均為個(gè)人理解和嘗試,如果不適用請(qǐng)參考別的文章。
二、解決方案
1. 解決方案一
使用命令查看鏡像交互路徑
sudo docker history tomcat

發(fā)現(xiàn)交互路徑為/bin/sh
在使用鏡像運(yùn)行容器掛載時(shí),命令最后加上這個(gè)交互路徑,如下
sudo docker run --name tomcat-libai -it -p 8099:8080 -d -v /tomcat-libai/tomcat:/usr/local/tomcat tomcat:latest /bin/sh
使用換行符更方便看,如下
sudo docker run \ --name tomcat-libai \ -it \ -p 8099:8080 \ -d \ -v /tomcat-libai/tomcat:/usr/local/tomcat \ tomcat:latest \ /bin/sh
運(yùn)行后返回容器ID,無報(bào)錯(cuò)

此方法可以掛載成功
此方法有個(gè)問題,就是掛載成功后,容器中Tomcat目錄中啥也沒有,可能是將宿主機(jī)的空目錄同步到容器,就變成了空的,也就是說,掛載目錄前這個(gè)目錄不能有東西,不然會(huì)自動(dòng)以宿主機(jī)空目錄為準(zhǔn)
2. 解決方案二
問題分析:
首先想一下,宿主機(jī)中的目錄和容器中的目錄掛載,那么最初的掛載如果兩邊目錄都有文件或目錄,且內(nèi)容不同,掛載后會(huì)是什么樣的結(jié)果呢?是宿主機(jī)中的目錄中出現(xiàn)容器目錄的內(nèi)容?還是容器目錄中出現(xiàn)了宿主機(jī)的內(nèi)容?亦或是兩邊目錄中都出現(xiàn)了對(duì)方的內(nèi)容?
答案我并沒有去驗(yàn)證,但我用宿主機(jī)的一個(gè)空目錄去掛載tomcat容器的tomcat目錄,出現(xiàn)了都為空的現(xiàn)象。大家都知道tomcat中是有文件目錄和文件的,且webapps這個(gè)文件夾是大家熟知的。但是宿主機(jī)中tomcat文件夾中確實(shí)空的。
所以我們以掛載Tomcat目錄為例,掛載目錄選擇子文件夾或創(chuàng)建新的子文件夾,如webapps,盡量不要使用主目錄也就是最頂層的目錄來掛載,執(zhí)行命令
sudo docker --name tomcat-libai -it -p 8099:8080 -d -v /tomcat-libai/tomcat/webapps:/usr/local/tomcat/webapps tomcat:latest
換行表示
sudo docker run \ --name tomcat-libai \ -it \ -p 8099:8080 \ -d \ -v /tomcat-libai/tomcat/webapps:/usr/local/tomcat/webapps \ tomcat:latest
可正常掛載,且不用使用類似/bin/sh的鏡像交互命令

總結(jié)
到此這篇關(guān)于Docker掛載目錄失敗問題解決方法的文章就介紹到這了,更多相關(guān)Docker掛載目錄失敗內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
docker用于將鏡像打包為tar文件核心用法和注意事項(xiàng)
在Docker中將鏡像打包為.tar包是一個(gè)常見的需求,尤其是在需要將鏡像遷移到其他服務(wù)器或進(jìn)行備份時(shí),這篇文章主要介紹了docker用于將鏡像打包為tar文件核心用法和注意事項(xiàng),需要的朋友可以參考下2025-12-12
docker?hub在線編譯github代碼實(shí)現(xiàn)
本文主要介紹了docker?hub在線編譯github代碼實(shí)現(xiàn),包含創(chuàng)建倉庫并在線編譯項(xiàng)目,解決本地依賴?yán)∈栴},最終通過docker?push推送鏡像,感興趣的可以了解一下2025-05-05
數(shù)據(jù)卷(Data Volumes)及dockefile詳解
在生產(chǎn)環(huán)境中使用Docker,往往需要對(duì)數(shù)據(jù)進(jìn)行持久化,或者需要在多個(gè)容器之間進(jìn)行數(shù)據(jù)共享,這必然涉及容器的數(shù)據(jù)管理操作,今天給大家介紹下數(shù)據(jù)卷(Data Volumes)及dockefile的相關(guān)知識(shí),感興趣的朋友一起看看吧2023-01-01
Docker中Cgroup資源配置的實(shí)現(xiàn)
Cgroup不僅可以限制被namespace?隔離起來的資源,還可以為資源設(shè)置權(quán)重、計(jì)算使用量、操控進(jìn)程啟停等,本文主要介紹了Docker中Cgroup資源配置的實(shí)現(xiàn),感興趣的可以了解一下2023-09-09
Docker 安裝 Nginx 并掛載目錄的實(shí)現(xiàn)示例
本文介紹了如何使用Docker拉取Nginx鏡像、創(chuàng)建容器,并設(shè)置掛載目錄,掛載目錄用于將容器內(nèi)配置文件與主機(jī)關(guān)聯(lián),便于直接修改影響容器配置,感興趣的可以了解一下2024-10-10
Docker啟動(dòng)mysql服務(wù)的實(shí)現(xiàn)步驟
本文主要介紹了Docker啟動(dòng)mysql服務(wù)的實(shí)現(xiàn)步驟,文中根據(jù)實(shí)例編碼詳細(xì)介紹的十分詳盡,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03
Docker部署Node.js的實(shí)現(xiàn)示例
本文介紹了在服務(wù)器上使用Docker部署Node.js項(xiàng)目,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-12-12
Docker Desktop啟動(dòng)后容器自啟動(dòng)關(guān)閉指南
在使用 Docker Desktop 的時(shí)候,有些容器會(huì)在每次啟動(dòng) Docker Desktop 后自動(dòng)啟動(dòng),但是這個(gè)服務(wù)我并不是每次都需要用,所以希望它不要跟隨 Docker Desktop 自動(dòng)啟動(dòng),而是在需要的時(shí)候手動(dòng)啟動(dòng),所以本文給大家介紹了Docker Desktop啟動(dòng)后容器自啟動(dòng)關(guān)閉方法2026-06-06
LINUX中Docker?Swarm的介紹和詳細(xì)使用教程
Docker?Swarm是Docker的集群管理工具,將多個(gè)節(jié)點(diǎn)統(tǒng)一管理,支持服務(wù)部署、擴(kuò)縮容與滾動(dòng)更新,適用于高可用分布式應(yīng)用,本文給大家介紹LINUX中Docker?Swarm的介紹和詳細(xì)使用教程,感興趣的朋友一起看看吧2025-09-09

