解决docker挂载的目录无法读写问题
使用下面的命令可以创建一个容器并且把本地的/home/dock/Downloads目录挂载到容器中的/usr/Downloads中
[root@docker ~]# docker run -it -v /home/dock/Downloads:/usr/Downloads ubuntu /bin/bash
在Centos上创建完后,会出现如下问题
root@637fe9ea94f0:/usr/Downloads# ls ls: cannot open directory '.': Permission denied
解决办法:
原因是CentOS7中的安全模块selinux把权限禁掉了,
有以下几种方式解决挂载的目录没有权限的问题:
1.在运行容器的时候,给容器加特权,及加上 --privileged=true 参数:
docker run -i -t -v /soft:/soft --privileged=true 637fe9ea94f0 /bin/bash
2.临时关闭selinux:
setenforce 0
3.添加selinux规则,改变要挂载的目录的安全性文本
补充:docker挂载文件夹后不能访问,没有权限
输入docker run 后挂载的文件夹不能访问,没有权限
例如:
sudo nvidia-docker run -p 8090:8888 -p 8091:80 -p 8092:6666 --name=pytorch0.4 -v ~/workspace:/root/workspace -i --shm-size 31G -t dsksd/pytorch:0.4.1 /bin/bash
将主机的workspace文件夹与容器的/root/workspace文件夹相挂载,但是在主机上不能向workspace文件夹中写入数据。因为此时文件夹的拥有者为root。
可以执行命令:
sudo chown -R $USER 文件夹位置(/workspace)
文件夹就可以进行读写了。但是重启后需要重新执行上述命令。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。如有错误或未考虑完全的地方,望不吝赐教。
相关推荐
-
解决docker run中使用 ./ 相对路径挂载文件或目录失败的问题
docker-compose.yml文件中允许使用'./'相对路径 version: '3' ... volumes: - ./init-mongo.js:/docker-entrypoint-initdb.d/init-mongo.js:ro - ./mongo-volume:/data/db ... 会将当前路径下的init-mongo.js文件挂载到容器中的/docker-entrypoint-initdb.d/init-mongo.js,并且设置为只读方式; 会将当前路径下的mongo-
-
docker 查看容器的挂载目录操作
只显示Docker容器挂载目录信息 docker inspect --format "{{.Config.Volumes}}" 369a1376f78c 显示Docker容器和物理主机挂载目录信息 方法一 docker inspect -f "{{.Mounts}}" 369a1376f78c 方法二 docker inspect 369a1376f78c | grep Mounts -A 50 补充:Docker 显示某个容器所有的挂载目录 docker insp
-
Docker容器中挂载NFS共享目录的实现
之前在https://www.jb51.net/article/205922.htm 介绍过使用Dockerfile构建ubuntu 16.04镜像,并在容器中编译执行Messy_Test项目.这里介绍下如何在容器中挂载NFS服务器上的共享目录. Dockerfile内容如下: FROM ubuntu:16.04 LABEL maintainer="FengBingchun fengbingchun@163.com" \ version="1.0" \ descri
-
docker-修改容器挂载目录的3种方法小结
方式一:修改配置文件(需停止docker服务) 1.停止docker服务 systemctl stop docker.service(关键,修改之前必须停止docker服务) 2.vim /var/lib/docker/containers/container-ID/config.v2.json 修改配置文件中的目录位置,然后保存退出 "MountPoints":{"/home":{"Source":"/docker",&qu
-
docker挂载本地目录和数据卷容器操作
1.docker挂载本地目录 docker可以支持把一个宿主机上的目录挂载到镜像里. 交互模式运行 docker run -it -v /home/dock/Downloads:/usr/Downloads ubuntu64 /bin/bash 后台运行 docker run -d -v /home/dock/Downloads:/usr/Downloads --name ubuntu1 ubuntu64 通过-v参数,冒号前为宿主机目录,必须为绝对路径,冒号后为镜像内挂载的路径. 现在镜像内就
-
docker 启动elasticsearch镜像,挂载目录后报错的解决
从docker hub下载了一个es的镜像,版本为6.4.2,详细信息如下: 比较重要的就是这两条,第一个是工作目录,挂载目录也需要和这里对应:第二个是启动命令,这里是指定了一个预先写好的启动脚本.所以我启动了一个空容器去查看了下容器内的情况: 容器内部目录结构如上图,data是用来存放数据,logs用来存放日志. 接着查看下启动脚本 /usr/local/bin/docker-entrypoint.sh 前半部分我也是看的一知半解,不过真正和挂载目录相关的是最后这部分,这里处理了挂载目录后的操
-
docker windows10 共享目录挂载失败的解决方案
起因 在执行docker脚本的时候,出现不能创建容器的错误. 如下所示: Cannot create container for service xxx: b'Drive has not been shared' 上了Stack Overflow,查看解决方法是通过Setting->Shared Drives,接着勾选自己想要用于docker挂载镜像的磁盘地址. 但是,无论你怎么勾选,Rest credentials,Apply,甚至Reset,出厂化都无济于事.每一次输入用户密码后,docke
-
解决docker挂载的目录无法读写问题
使用下面的命令可以创建一个容器并且把本地的/home/dock/Downloads目录挂载到容器中的/usr/Downloads中 [root@docker ~]# docker run -it -v /home/dock/Downloads:/usr/Downloads ubuntu /bin/bash 在Centos上创建完后,会出现如下问题 root@637fe9ea94f0:/usr/Downloads# ls ls: cannot open directory '.': Permiss
-
详解Docker挂载本地目录及实现文件共享的方法
docker挂载本地目录的方法总结: Docker容器启动的时候,如果要挂载宿主机的一个目录,可以用-v参数指定. 譬如我要启动一个centos容器,宿主机的/test目录挂载到容器的/soft目录,可通过以下方式指定: # docker run -it -v /test:/soft centos /bin/bash 这样在容器启动后,容器内会自动创建/soft的目录.通过这种方式,我们可以明确一点,即-v参数中,冒号":"前面的目录是宿主机目录,后面的目录是容器内目录. 貌似简单,其
-
详解Docker挂载本地目录
docker可以支持把一个宿主机上的目录挂载到镜像里. docker run -it -v /home/dock/Downloads:/usr/Downloads ubuntu64 /bin/bash 通过-v参数,冒号前为宿主机目录,必须为绝对路径,冒号后为镜像内挂载的路径. 现在镜像内就可以共享宿主机里的文件了. 默认挂载的路径权限为读写.如果指定为只读可以用:ro docker run -it -v /home/dock/Downloads:/usr/Downloads:ro ubuntu
-
解决docker日志挂载的问题
关键是本地服务器没有写入的权限 关键看这里吧(Permission denied), 一直没有看正方,以为是配置日志文件 找不到有问题,下面是部分异常 10:35:09,498 |-ERROR in ch.qos.logback.core.rolling.RollingFileAppender[FILE] - openFile(null,true) call failed. java.io.FileNotFoundException: logs/bandwidth.log.2019-04-25.
-
Docker中运行nginx并挂载本地目录到镜像中的方法
1 从hup上pull镜像 docker pull nginx 2 创建将要挂载的目录 mkdir -p /data/nginx/{conf,conf.d,html,logs} 3 先要有配置文件才能启动容器 3.1 vim /data/conf/nginx.conf user nginx; worker_processes 1; error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid; events { worker_co
-
使用Docker将容器目录挂载到主机上的实现方法
目录 一.基本介绍 二.将容器目录挂载到主机 一.基本介绍 这里我们主要介绍 Docker 里的一个命令,叫做 --mount,其本质上来说和 --volume 命令并没有太大区别,因为这两个命令都是用来给容器提供一个挂载目录.唯一的区别便是,容器的挂载类型不同,那么效果也会有所不同. 容器的挂载类型: bind:将宿主机的指定目录挂载到容器的指定目录,以覆盖的形式挂载(这也就意味着,容器指定目录下的内容也会随着消失) volume:在宿主机的 Docker 存储目录下创建一个目录,并挂载到容器
-
解决Docker之mysql容器数据库更改不生效的问题
用官方的mysql 镜像需要修改一些内容,比如配置文件的修改,DB数据文件的目录等,更改之后如果重新运行容器,改过的文件就无效了,新生成的容器不会有之前改变的内容 第一种是修改官方下载的镜像,修改之后 提交一个新的镜像文件 docker commit -m 等新生成的镜像信息, 第二种MYSQL的DB数据,容器关闭后 如果用 docker restart 重启同一容器,那么数据是正常的,如果重新docker run 容器那么数据就不会显示,因为每个容器都有一个文件地址 这就需要把数据文件挂载出来
随机推荐
- Windows环境利用虚拟机Vmware安装Mac OS10.11(图文)
- 一个简单但常用的javascript表格样式_鼠标划过行变色 简洁实现
- IIS7.5 伪静态 脚本映射 配置方法(图文详解)
- 正则表达式之捕获组/非捕获组介绍
- Java使用synchronized修饰方法来同步线程的实例演示
- ASP.NET缓存管理的几种方法
- Python的函数的一些高阶特性
- 用于App服务端的MySQL连接池(支持高并发)
- javascript 实现父窗口引用弹出窗口的值的脚本
- 跟我学习javascript的隐式强制转换
- JS input 数字验证代码
- jQuery实现当前页面标签高亮显示的方法
- ESC之ESC.wsf可以实现javascript的代码压缩附使用方法第1/5页
- 学习使用bootstrap基本控件(table、form、button)
- JavaScript字符串删除重复字符的方法
- windows下java环境变量的设置方法
- thinkPHP5(TP5)实现改写跳转提示页面的方法
- Android 实时监测(监听)网络连接状态变化
- C++实例输入多行数字到数组
- VS2017 安装打包插件的图文教程