网站备案主体,做网站的公司主营成本应该写啥,吉林省建设厅网站市政资质要求,wordpress顶部导航栏再哪里创建天行健#xff0c;君子以自强不息#xff1b;地势坤#xff0c;君子以厚德载物。 每个人都有惰性#xff0c;但不断学习是好好生活的根本#xff0c;共勉#xff01; 文章均为学习整理笔记#xff0c;分享记录为主#xff0c;如有错误请指正#xff0c;共同学习进步。… 天行健君子以自强不息地势坤君子以厚德载物。 每个人都有惰性但不断学习是好好生活的根本共勉 文章均为学习整理笔记分享记录为主如有错误请指正共同学习进步。 Docker挂载目录失败问题解决 问题背景解决方案一解决方案二 问题背景
运行镜像生成容器时挂载目录失败 执行的命令如下
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执行命令后报错如下 报错代码复制过来完整看一遍
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.大致意思就是因为文件不能找到指定的变量路径导致创建失败不知翻的对不对勿cue _
以下解决方案内容均为个人理解和尝试如果不适用请参考别的文章。
解决方案一
使用命令查看镜像交互路径
sudo docker history tomcat发现交互路径为/bin/sh 在使用镜像运行容器挂载时命令最后加上这个交互路径如下
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运行后返回容器ID无报错 此方法可以挂载成功 此方法有个问题就是挂载成功后容器中Tomcat目录中啥也没有可能是将宿主机的空目录同步到容器就变成了空的也就是说挂载目录前这个目录不能有东西不然会自动以宿主机空目录为准
解决方案二
问题分析 首先想一下宿主机中的目录和容器中的目录挂载那么最初的挂载如果两边目录都有文件或目录且内容不同挂载后会是什么样的结果呢是宿主机中的目录中出现容器目录的内容还是容器目录中出现了宿主机的内容亦或是两边目录中都出现了对方的内容 答案我并没有去验证但我用宿主机的一个空目录去挂载tomcat容器的tomcat目录出现了都为空的现象。大家都知道tomcat中是有文件目录和文件的且webapps这个文件夹是大家熟知的。但是宿主机中tomcat文件夹中确实空的。
所以我们以挂载Tomcat目录为例挂载目录选择子文件夹或创建新的子文件夹如webapps尽量不要使用主目录也就是最顶层的目录来挂载执行命令
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的镜像交互命令