Docker挂载目录失败问题解决方法

 更新时间:2024年10月22日 10:19:24   作者:寒山李白  
在使用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 =_ =)

以下解决方案内容均为个人理解和尝试,如果不适用请参考别的文章。

二、解决方案

1. 解决方案一

使用命令查看镜像交互路径

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目录中啥也没有,可能是将宿主机的空目录同步到容器,就变成了空的,也就是说,挂载目录前这个目录不能有东西,不然会自动以宿主机空目录为准

2. 解决方案二

问题分析:

首先想一下,宿主机中的目录和容器中的目录挂载,那么最初的挂载如果两边目录都有文件或目录,且内容不同,挂载后会是什么样的结果呢?是宿主机中的目录中出现容器目录的内容?还是容器目录中出现了宿主机的内容?亦或是两边目录中都出现了对方的内容?

答案我并没有去验证,但我用宿主机的一个空目录去挂载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的镜像交互命令

总结 

到此这篇关于Docker挂载目录失败问题解决方法的文章就介绍到这了,更多相关Docker挂载目录失败内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • docker用于将镜像打包为tar文件核心用法和注意事项

    docker用于将镜像打包为tar文件核心用法和注意事项

    在Docker中将镜像打包为.tar包是一个常见的需求,尤其是在需要将镜像迁移到其他服务器或进行备份时,这篇文章主要介绍了docker用于将镜像打包为tar文件核心用法和注意事项,需要的朋友可以参考下
    2025-12-12
  • docker hub在线编译github代码实现

    docker hub在线编译github代码实现

    本文主要介绍了docker hub在线编译github代码实现,包含创建仓库并在线编译项目,解决本地依赖拉取失败问题,最终通过docker push推送镜像,感兴趣的可以了解一下
    2025-05-05
  • 数据卷(Data Volumes)及dockefile详解

    数据卷(Data Volumes)及dockefile详解

    在生产环境中使用Docker,往往需要对数据进行持久化,或者需要在多个容器之间进行数据共享,这必然涉及容器的数据管理操作,今天给大家介绍下数据卷(Data Volumes)及dockefile的相关知识,感兴趣的朋友一起看看吧
    2023-01-01
  • Docker管理之碎片知识整理小结

    Docker管理之碎片知识整理小结

    本文旨在汇总整理Docker日常管理之知识碎片,以便日后回顾查看参考。文中通过示例代码介绍的非常详细,感兴趣的小伙伴们可以参考一下
    2021-11-11
  • Docker中Cgroup资源配置的实现

    Docker中Cgroup资源配置的实现

    Cgroup不仅可以限制被namespace 隔离起来的资源,还可以为资源设置权重、计算使用量、操控进程启停等,本文主要介绍了Docker中Cgroup资源配置的实现,感兴趣的可以了解一下
    2023-09-09
  • Docker 安装 Nginx 并挂载目录的实现示例

    Docker 安装 Nginx 并挂载目录的实现示例

    本文介绍了如何使用Docker拉取Nginx镜像、创建容器,并设置挂载目录,挂载目录用于将容器内配置文件与主机关联,便于直接修改影响容器配置,感兴趣的可以了解一下
    2024-10-10
  • Docker启动mysql服务的实现步骤

    Docker启动mysql服务的实现步骤

    本文主要介绍了Docker启动mysql服务的实现步骤,文中根据实例编码详细介绍的十分详尽,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • Docker部署Node.js的实现示例

    Docker部署Node.js的实现示例

    本文介绍了在服务器上使用Docker部署Node.js项目,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-12-12
  • Docker Desktop启动后容器自启动关闭指南

    Docker Desktop启动后容器自启动关闭指南

    在使用 Docker Desktop 的时候,有些容器会在每次启动 Docker Desktop 后自动启动,但是这个服务我并不是每次都需要用,所以希望它不要跟随 Docker Desktop 自动启动,而是在需要的时候手动启动,所以本文给大家介绍了Docker Desktop启动后容器自启动关闭方法
    2026-06-06
  • LINUX中Docker Swarm的介绍和详细使用教程

    LINUX中Docker Swarm的介绍和详细使用教程

    Docker Swarm是Docker的集群管理工具,将多个节点统一管理,支持服务部署、扩缩容与滚动更新,适用于高可用分布式应用,本文给大家介绍LINUX中Docker Swarm的介绍和详细使用教程,感兴趣的朋友一起看看吧
    2025-09-09

最新评论