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的發行版也需要注意此問題。
相關文章
- PHP中 mkdir: Permission denied 問題PHP
- Docker容器掛載資料卷出現Permission denied許可權問題的解決辦法Docker
- Pod掛載Volume失敗問題分析
- 寶塔解決 mkdir() Permission Denied 的問題
- k8s在掛載持久盤(Volume)時,若許可權不投,則可能會: 容器啟動報錯: Permission denied_nfs permission denied(許可權不夠用時),也可能不會報錯K8SNFS
- Jenkins中構建(Build)Docker映象時出現permission deniedJenkinsUIDocker
- nginx部署(13:Permission denied)報錯Nginx
- unix /var/run/docker.sock: connect: permission deniedDocker
- Docker + maven build problem — unix://localhost:80: Permission deniedDockerMavenUIlocalhost
- Python 執行報錯 PermissionError: [Errno 13] Permission denied: '***.***'PythonError
- Nginx報錯:Permission denied,沒有許可權!Nginx
- 【Android】Permission denied (missing INTERNET permission?)異常踩坑Android
- Angular macOS Err:EACCES: permission deniedAngularMac
- Nginx: stat() failed (13: permission denied)NginxAI
- Python報錯:PermissionError: [Errno 13] Permission denied解決方案PythonError
- frepplectl解決報錯:bash: /usr/bin/frepplectl: Permission denied
- Kubernetes利用Volume掛載ConfigMap與Secret
- Android Studio: /dev/kvm device permission deniedAndroiddev
- Error: Permission denied @ apply2filesErrorAPP
- CentOS7.4 部署 DockerCentOSDocker
- Permission denied Command PhaseScriptExecution failed with a nonzero exit codeAI
- Permission denied:user=xxx,access=WRITE,inode=xxx
- PermissionError: [Errno 13] Permission denied 如何解決Error
- 解決“su: cannot open session: Permission denied”Session
- Android10 建立檔案 Permission deniedAndroid
- Ubuntu git pull 出現Permission denied ErrorUbuntuGitError
- 極速全景圖下載出錯顯示Permission denied怎麼回事
- 詳解Nginx 13: Permission denied 解決方案Nginx
- git push出現Permission denied (publickey)錯誤Git
- PermissionError: [Errno 13] Permission denied解決辦法Error
- listen EACCES: permission denied 0.0.0.0:9520 at Server.setupListenHandleServer
- 易優CMS後臺上傳圖片報錯mkdir(): Permission denied 報錯-eyoucms
- mount: /dev/vdb 防寫,將以只讀方式掛載dev
- Docker 掛載Docker
- hive建立分割槽表報錯AccessControlException Permission denied: user=NONE, access=WRITE, inodeHiveExceptionNone
- Docker中SQlite的配置和掛載DockerSQLite
- Android adb除錯出現:opendir failed, Permission deniedAndroid除錯AI
- 【踩坑筆記】專案出現Permission denied筆記