關于CentOS7.4中Docker以rw方式掛載volume報Permission denied

一、問題背景

今天在CentOS7.4.1708上實踐Docker掛載volume,一切按照正常流程進行操作,無論是創(chuàng)建目錄、創(chuàng)建文件、還是查看、編輯主機上創(chuàng)建好的文件,都報“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

反復查閱各種資料,官方文檔都拜讀幾遍了,都沒找到原因。操作系統(tǒng)版本及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上出現(xiàn)這個問題,換個其他發(fā)行版是不是也出現(xiàn)一樣的問題呢?平日里最常用的發(fā)行版莫過于CentOS和Ubuntu了,何不去Ubuntu上試試看呢?
2.說干就干,看一下我的Ubuntu系統(tǒng)信息及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版本號高很多!不管了,先看看是否跟操作系統(tǒng)有關!

3.在本機創(chuàng)建相關目錄,并執(zhí)行docker運行命令:

root@chatdevops:~# mkdir -p /data/volume
root@chatdevops:~# docker run -it -v /data/volume:/data/webapp ubuntu /bin/bash

4.在Ubuntu新docker掛載點下創(chuàng)建目錄:

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/

創(chuàng)建成功!果然跟操作系統(tǒng)有關,而不是與docker版本有關!

5.分析問題。

CentOS7.4與Ubuntu18.04Server版有啥區(qū)別呢?內(nèi)核?SELinux?

為啥會想到SELinux而不是首先考慮內(nèi)核呢?因為內(nèi)核問題解決起來比較麻煩,這兩個發(fā)行版的內(nèi)核版本相差較大,SELinux經(jīng)常會成為一切問題的罪魁禍首!還有,剛剛ls的時候沒看到Ubuntu發(fā)行版權限列末尾的點,這個才是重點!來看一下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.遇到問題的時候盡可能換個思路來試一下,不能總在一個地方轉(zhuǎn)圈。

2.驗證一些問題的時候盡量保持基礎軟件環(huán)境一致,不要一次性驗證多個條件,我今天這個操作就不太嚴謹。

3.CentOS7.4.1708默認是啟用SELinux的,而Ubuntu18.04 Server版則未啟用SELinux,禁用SELinux后需要重啟系統(tǒng)。

4.在CentOS7.4.1708的生產(chǎn)環(huán)境中使用docker時建議禁用SELinux,當然如果是對SELinux十分熟悉不禁用也是無妨的!

5.目前僅對CentOS7.4進行了驗證,其他開啟了SELinux的發(fā)行版也需要注意此問題。

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容