Docker掛載目錄失敗問(wèn)題解決方法
一、問(wèn)題背景
運(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ù)制過(guò)來(lái)完整看一遍
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,無(wú)報(bào)錯(cuò)
此方法可以掛載成功
此方法有個(gè)問(wèn)題,就是掛載成功后,容器中Tomcat目錄中啥也沒(méi)有,可能是將宿主機(jī)的空目錄同步到容器,就變成了空的,也就是說(shuō),掛載目錄前這個(gè)目錄不能有東西,不然會(huì)自動(dòng)以宿主機(jī)空目錄為準(zhǔn)
2. 解決方案二
問(wèn)題分析:
首先想一下,宿主機(jī)中的目錄和容器中的目錄掛載,那么最初的掛載如果兩邊目錄都有文件或目錄,且內(nèi)容不同,掛載后會(huì)是什么樣的結(jié)果呢?是宿主機(jī)中的目錄中出現(xiàn)容器目錄的內(nèi)容?還是容器目錄中出現(xiàn)了宿主機(jī)的內(nèi)容?亦或是兩邊目錄中都出現(xiàn)了對(duì)方的內(nèi)容?
答案我并沒(méi)有去驗(yàn)證,但我用宿主機(jī)的一個(gè)空目錄去掛載tomcat容器的tomcat目錄,出現(xiàn)了都為空的現(xiàn)象。大家都知道tomcat中是有文件目錄和文件的,且webapps這個(gè)文件夾是大家熟知的。但是宿主機(jī)中tomcat文件夾中確實(shí)空的。
所以我們以掛載Tomcat目錄為例,掛載目錄選擇子文件夾或創(chuàng)建新的子文件夾,如webapps,盡量不要使用主目錄也就是最頂層的目錄來(lái)掛載,執(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
可正常掛載,且不用使用類(lèi)似/bin/sh的鏡像交互命令
總結(jié)
到此這篇關(guān)于Docker掛載目錄失敗問(wèn)題解決方法的文章就介紹到這了,更多相關(guān)Docker掛載目錄失敗內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Docker?redmine項(xiàng)目管理工具的使用
Redmine?是一個(gè)開(kāi)源的,基于Web的項(xiàng)目管理和缺陷跟蹤工具,本文主要介紹了Docker?redmine項(xiàng)目管理工具的使用,具有一定的參考價(jià)值,感興趣的可以了解一下2022-01-01基于Docker實(shí)現(xiàn)MySQL主從復(fù)制的詳細(xì)教程
這篇博客整理了如何在Docker環(huán)境下配置MySQL主從復(fù)制,通過(guò)創(chuàng)建和命名兩個(gè)MySQL容器,設(shè)置獨(dú)立IP,并詳細(xì)說(shuō)明了在宿主機(jī)上持久化數(shù)據(jù)、開(kāi)啟root遠(yuǎn)程訪問(wèn)及添加復(fù)制用戶的過(guò)程,需要的朋友可以參考下2024-10-10Docker+DockerCompose封裝web應(yīng)用的方法步驟
這篇文章會(huì)介紹如何將后端、前端和網(wǎng)關(guān)通通使用 Docker 容器進(jìn)行運(yùn)行,并最終使用 DockerCompose 進(jìn)行容器編排,感興趣的可以了解一下2021-08-08Ubuntu系統(tǒng)下docker?Pull鏡像錯(cuò)誤timeout解決辦法
最近在用docker搭個(gè)開(kāi)發(fā)環(huán)境,發(fā)現(xiàn)在拉取鏡像的時(shí)候有點(diǎn)問(wèn)題,這篇文章主要給大家介紹了關(guān)于Ubuntu系統(tǒng)下docker?Pull鏡像錯(cuò)誤timeout的解決辦法,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-07-07