阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

CentOS7.4中Docker以rw方式挂载volume报Permission denied的解决思路

181次阅读
没有评论

共计 2423 个字符,预计需要花费 7 分钟才能阅读完成。

一、问题背景

今天在 CentOS7.4.1708 上实践 Docker 挂载 volume, 一切按照正常流程进行操作,无论是创建目录、创建文件、还是查看、编辑主机上创建好的文件,都报“Permission denied”,具体如下:

[root@linuxidc ~]# docker run -it -v /data/linuxidc:/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# exit1234567

反复查阅各种资料,官方文档都拜读几遍了,都没找到原因。操作系统版本及 docker 版本信息如下:

[root@linuxidc ~]# cat /etc/RedHat-release
CentOS Linux release 7.4.1708 (Core)
[root@linuxidc ~]# docker –version
Docker version 1.13.1, build 94f4240/1.13.1

二、解决过程

1. 在 CentOS7.4 上出现这个问题,换个其他发行版是不是也出现一样的问题呢?平日里最常用的发行版莫过于 CentOS 和 Ubuntu 了,何不去 Ubuntu 上试试看呢?
2. 说干就干,看一下我的 Ubuntu 系统信息及 Docker 版本信息:

root@linuxidc:~# cat /etc/issue
Ubuntu 18.04 LTS \n \l
root@linuxidc:~# docker –version
Docker version 17.12.1-ce, build 7390fc6

居然比 CentOS7.4 的 yum 安装的 docker 版本号高很多!不管了,先看看是否跟操作系统有关!

3. 在本机创建相关目录,并执行 docker 运行命令:

root@linuxidc:~# mkdir -p /data/volume
root@linuxidc:~# 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@linuxidc data]# ll
总用量 0
drwxr-xr-x. 3 root root 18 6 月  7 19:53 linuxidc
[root@ChatDevOps data]# ll -Z
drwxr-xr-x. root root unconfined_u:object_r:default_t:s0 linuxidc
[root@ChatDevOps ~]# getenforce
Enforcing

以上三种办法都核实了一下,SELinux 确实是开启的。

6. 关闭 SELinux 看一下:

[root@linuxidc data]# sed -i ‘s/SELINUX=enforcing/SELINUX=disabled/g’ /etc/selinux/config
[root@linuxidc data]# reboot

[root@linuxidc ~]# docker run -it –rm -v /data/linuxidc:/data/chatdevops:rw ubuntu /bin/bash
root@816e6beff208:/data/linuxidc# mkdir test
root@816e6beff208:/data/linuxidc# 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 的发行版也需要注意此问题。

6. 在 CentOS7.4 及 7.5 中的 Docker version 18.06.0-ce, build 0ffa825 不存在这个问题。

正文完
星哥说事-微信公众号
post-qrcode
 
星锅
版权声明:本站原创文章,由 星锅 2022-01-21发表,共计2423字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中