Docker挂载目录失败问题解决

这篇具有很好参考价值的文章主要介绍了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挂载目录失败问题解决,# Docker,docker,容器,运维
报错代码复制过来完整看一遍

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

Docker挂载目录失败问题解决,# Docker,docker,容器,运维
发现交互路径为/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,无报错
Docker挂载目录失败问题解决,# Docker,docker,容器,运维
此方法可以挂载成功
此方法有个问题,就是挂载成功后,容器中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的镜像交互命令
Docker挂载目录失败问题解决,# Docker,docker,容器,运维文章来源地址https://www.toymoban.com/news/detail-614786.html


到了这里,关于Docker挂载目录失败问题解决的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Docker -v 挂载主机目录到容器中(及数据卷容器)

    使用 Docker 的过程中,经常需要挂载主机上的目录或文件到 Docker 容器中,以实现数据的共享或持久化。而 docker run -v 命令便是用于挂载主机目录到 Docker 容器中的常用命令。 在创建启动容器时,使用 -v 参数设置数据卷 注意事项: 目录必须是绝对路径 如果目录不存在,会自

    2024年02月10日
    浏览(35)
  • 【Docker】在容器中管理数据&&数据卷挂载以及宿主机目录挂载

                                      🎉🎉欢迎来到我的CSDN主页!🎉🎉                         🏅我是平顶山大师,一个在CSDN分享笔记的博主。📚📚         🌟推荐给大家我的博客专栏《【Docker】在容器中管理数据》。🎯🎯                         🎁

    2024年01月16日
    浏览(36)
  • 【Docker】Docker挂载和修改容器中的目录及配置文件的若干种方式

    我们知道,Docker相当于提供了一个 独立于宿主机的运行环境。当我们使用Docker部署了中间件例如nginx的容器后,一般都是需要修改配置文件的。那么我们想到的第一个方法就是进入容器去修改[1]。 1.进入容器内修改 首先我们需要有一个已经启动的容器。pull image后通过run-d -

    2024年02月08日
    浏览(31)
  • 当docker中容器运行时,如何将目录和宿主机进行挂载

    容器已运行,但还想挂载文件 容器已经运行起来了,突然想给容器的目录进行挂载,通常是在运行容器时加上 -v  命令 进行挂载。运行起来的容器想挂载文件夹可以通过修改容器在宿主机的配置文件进行解决。 在配置文件中加入新的挂载 1.查看容器存放目录 2.进入该目录

    2024年01月25日
    浏览(37)
  • Docker挂载-宿主机软连接目录-问题

    挂载宿主机软连接的路径问题【 -v /usr/local/nginx/:/home/test/nginx/ 】,软连接可以映射任何路径,但有一个前提是:其所映射的路径必须要在容器中存在,否则就无法访问到数据 1、如果软连接路径在容器中已经存在,如 /root/home ,或者在当前挂载命令 -v 前面的 -v 命令已经将软

    2024年02月22日
    浏览(51)
  • yapi容器化docker部署以及mongodb容器的持久化挂载异常问题

    通过docker形式部署yapi,需要准备一个mongodb,然后直接在一个空文件夹里写好Dockerfile,其中通过wget下载yapi的zip包。 基本按照这篇文章:https://www.modb.pro/db/149666 来处理即可 把mongodb的docker 跑起来, --auth 表示需要密码才能访问 注意 原文中启动mongo的容器是这样的 首先创建Mon

    2024年02月14日
    浏览(39)
  • Docker数据管理之三种方式- 数据卷(Volumes)- 挂载主机目录(Bind mounts)- 数据卷容器(Data Volume Containers)

    文章主人公:帅哥BUG😎 文章路人: 路人  🤨   路人  😛 😎: docker在容器中管理数据主要有三种方式哦~ 🤨:  啊!,我记得docker在容器中管理数据主要方式是这两种吧  - 数据卷(Volumes) - 挂载主机目录(Bind mounts)      😛:  额,主要的方式是这两种?我怎么记得是这

    2024年02月05日
    浏览(58)
  • 解决docker通过volumes挂载文件,宿主机修改后容器内不同步,重启服务才能同步

    将文件的权限改为777,即 chmod 777 filename 。 详细解释在该文章: https://huaweicloud.csdn.net/633114e5d3efff3090b51a5a.html 说明: 这是由于linux系统文件挂载机制导致的。 docker通过volumes挂载文件到容器中,有以下两种方式: 1、挂载目录 2、挂载具体文件:并不是挂载了某个文件的路径,

    2024年03月10日
    浏览(48)
  • Docker:本地目录挂载

    查看MySQL容器,判断是否有数据卷挂载 基于宿主机目录实现MySQL数据目录、配置文件、初始化脚本的挂载 docker inspect nginx 是用来获取关于 Docker 容器或镜像配置和元数据的详细信息的命令。 当你运行 docker inspect 命令时,它将返回一个 JSON 格式的输出,其中包含有关指定容器或

    2024年02月06日
    浏览(32)
  • Docker挂载目录

    read-only权限 read-write权限 设置相同的安全上下文 授予目录读写执行权限, 注意用户和组和宿主机上的用户和组匹配

    2024年02月07日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包