CentOS7.4中Docker以rw方式挂载volume报Permission denied的解决思路
一、问题背景
今天在CentOS7.4.1708上实践Docker挂载volume,一切按照正常流程进行操作,无论是创建目录、创建文件、还是查看、编辑主机上创建好的文件,都报“Permission denied”,具体如下:
[root@ChatDevOps ~]# docker run -it -v /data/chatdevops:/data/webapp:rw ubuntu /bin/bash root@4b92ff9fbced:/data/webapp# mkdir test mkdir: cannot create directory 'test': Permission denied root@4b92ff9fbced:/# cd /data/webapp/ root@4b92ff9fbced:/data/webapp# ll ls: cannot open directory '.': Permission denied root@4b92ff9fbced:/data/webapp# exit
反复查阅各种资料,官方文档都拜读几遍了,都没找到原因。操作系统版本及docker版本信息如下:
[root@ChatDevOps ~]# cat /etc/redhat-release CentOS Linux release 7.4.1708 (Core) [root@ChatDevOps ~]# docker --version Docker version 1.13.1, build 94f4240/1.13.1
二、解决过程
1.在CentOS7.4上出现这个问题,换个其他发行版是不是也出现一样的问题呢?平日里最常用的发行版莫过于CentOS和Ubuntu了,何不去Ubuntu上试试看呢?
2.说干就干,看一下我的Ubuntu系统信息及Docker版本信息:
root@chatdevops:~# cat /etc/issue Ubuntu 18.04 LTS \n \l root@chatdevops:~# docker --version Docker version 17.12.1-ce, build 7390fc6
居然比CentOS7.4的yum安装的docker版本号高很多!不管了,先看看是否跟操作系统有关!
3.在本机创建相关目录,并执行docker运行命令:
root@chatdevops:~# mkdir -p /data/volume root@chatdevops:~# docker run -it -v /data/volume:/data/webapp ubuntu /bin/bash
4.在Ubuntu新docker挂载点下创建目录:
root@84bf1bb983ac:/data/webapp# mkdir test root@84bf1bb983ac:/data/webapp# ll total 12 drwxr-xr-x 3 root root 4096 Jun 7 11:37 ./ drwxr-xr-x 3 root root 4096 Jun 7 11:37 ../ drwxr-xr-x 2 root root 4096 Jun 7 11:37 test/
创建成功!果然跟操作系统有关,而不是与docker版本有关!
5.分析问题。
CentOS7.4与Ubuntu18.04Server版有啥区别呢?内核?SELinux?
为啥会想到SELinux而不是首先考虑内核呢?因为内核问题解决起来比较麻烦,这两个发行版的内核版本相差较大,SELinux经常会成为一切问题的罪魁祸首!还有,刚刚ls的时候没看到Ubuntu发行版权限列末尾的点,这个才是重点!来看一下CentOS的文件属性:
[root@ChatDevOps data]# ll 总用量 0 drwxr-xr-x. 3 root root 18 6月 7 19:53 chatdevops [root@ChatDevOps data]# ll -Z drwxr-xr-x. root root unconfined_u:object_r:default_t:s0 chatdevops [root@ChatDevOps ~]# getenforce Enforcing
以上三种办法都核实了一下,SELinux确实是开启的。
6.关闭SELinux看一下:
[root@ChatDevOps data]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config [root@ChatDevOps data]# reboot
[root@ChatDevOps ~]# docker run -it --rm -v /data/chatdevops:/data/chatdevops:rw ubuntu /bin/bash root@816e6beff208:/data/chatdevops# mkdir test root@816e6beff208:/data/chatdevops# ll total 0 drwxr-xr-x. 3 root root 18 Jun 7 11:53 ./ drwxr-xr-x 3 root root 24 Jun 7 11:52 ../ drwxr-xr-x 2 root root 6 Jun 7 11:53 test/
问题圆满解决!
三、总结
1.遇到问题的时候尽可能换个思路来试一下,不能总在一个地方转圈。
2.验证一些问题的时候尽量保持基础软件环境一致,不要一次性验证多个条件,我今天这个操作就不太严谨。
3.CentOS7.4.1708默认是启用SELinux的,而Ubuntu18.04 Server版则未启用SELinux,禁用SELinux后需要重启系统。
4.在CentOS7.4.1708的生产环境中使用docker时建议禁用SELinux,当然如果是对SELinux十分熟悉不禁用也是无妨的!
5.目前仅对CentOS7.4进行了验证,其他开启了SELinux的发行版也需要注意此问题。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
时间同步-ntp服务器的搭建(docker版本)
introduce 用于构建cdm所需要的ntp服务器镜像,实现宿主机和ntpserver同步,ntpserver于ntpclient的同步 项目地址 项目github image build docker image build -t docker.finogeeks.club/linzhihuang/fino-cdm-ntp:v2.0 run docker run --rm -it docker.finogeeks.club/linzhihuang/fino-cdm-ntp:v2.0 run cluster docker compose up config 我们通过下面的几步来完成ntp服务端和客户端的搭建 在server的服务机器上我们通过 volumes: - /etc/localtime:/etc/localtime:ro 让docker和服务器的时间保持一致 在server的服务上还需要配置/etc/ntp.conf,方式如下shell rm /etc/ntp.conf cat >> /etc/ntp.conf <<EOF # 中国这边最活跃的时间服...
- 下一篇
115科技宣布整体迁移至阿里云 45天迁移百PB数据创互联网史纪录
6月7日,国内领先的云存储企业115科技在2018云栖大会·上海峰会上宣布,已将公司全部数据迁移至阿里云上,双方合力完成了互联网史上规模最大的公共云数据迁移,总量超过100PB。同时,整个过程仅耗时45天,创造了百PB级数据公共云迁移的新纪录,演绎了一场云计算的“速度与激情”。 100PB的数据有多大?相当于360亿张照片,打印出来可以环绕地球200周。如果用普通办公网络上传,要2700多年才能传完。 100 PB有多大?了解一下—— 在云计算普及的今天,如此大规模的上云变得更高效便捷,115科技总经理刘睿表示:“将基础设施托付给阿里云后,115科技团队得以集中精力,聚焦顶层设计,为用户提供更好的产品体验和服务。”出于自身需求的综合考量,115科技最终选择了阿里云作为合作伙伴,共同完成这次史诗级的迁移。 聚焦顶层业务,115科技整体业务上
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- CentOS6,CentOS7官方镜像安装Oracle11G
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- SpringBoot2全家桶,快速入门学习开发网站教程
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- CentOS7安装Docker,走上虚拟化容器引擎之路
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- CentOS8编译安装MySQL8.0.19