专栏首页耕耘实录CentOS7.4中Docker以rw方式挂载volume报Permission denied的解决思路

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的发行版也需要注意此问题。

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Linux修改用户名及相关信息(包括root)

    版权声明:本文为耕耘实录原创文章,各大自媒体平台同步更新。欢迎转载,转载请注明出处,谢谢

    耕耘实录
  • Linux 系统中查找正在运行的进程的完整命令、当前工作目录等信息的方法

    在某些系统故障的排查过程中,需要找出某个应用程序的工作目录、完整命令行等信息。通常会通过ps及top等命令来查看进程信息,但往往只能查到相对路径、部分命令行等。...

    耕耘实录
  • 一道关于文件批量查找并替换内容并移动文件且将其按规则重命名的面试题

    版权声明:本文为耕耘实录原创文章,各大自媒体平台同步更新。欢迎转载,转载请注明出处,谢谢

    耕耘实录
  • 每天一道剑指offer-二叉树的镜像

    今天的题目 每天的题目见github(看最新的日期): https://github.com/gzc426 具体的题目可以去牛客网对应专题去找。

    乔戈里
  • Linux设置本地yum源

    linux系统:CentOS-6.7 系统镜像:CentOS-6.7-x86_64-bin-DVD1.iso、CentOS-6.7-x86_64-bin-DV...

    CoderJed
  • Linux工作目录切换命令

    心跳包
  • Golang Leetcode 450. Delete Node in a BST.go

    版权声明:原创勿转 https://blog.csdn.net/anakinsun/article/details/89175007

    anakinsun
  • 剑指Offer - 面试题54. 二叉搜索树的第k大节点(二叉树循环遍历)

    来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/er-cha-sou-suo-shu-de-di-kd...

    Michael阿明
  • 利用rbd命令把 ceph pool 中的一个镜像导出

    查看镜像 [root@node1 ~]# rbd ls images a56330e7-79d7-4639-a68f-366ac344bfe2 eccfee07...

    院长技术
  • 浏览器环境检测

    本文是直接把seleniumpyppeteer 以及正常打开浏览器 的环境差异直接列出来

    爬虫

扫码关注云+社区

领取腾讯云代金券