Docker使用-v掛載主機目錄到容器后出現Permission denied


1. 在掛載主機目錄的到容器后,操作掛載的目錄出現權限問題:

# 將主機上的/data/share/master目錄掛載到容器的/opt/share目錄
docker run -it --name=master --hostname=master -v /data/share/master:/opt/share centos-hadoop /bin/bash
[root@master share]# pwd  #進入掛載目錄
/opt/share
[root@master share]# touch hello  #建立新文件  
touch: cannot touch 'hello': Permission denied  # 無權建立文件

2. 問題原因及解決

  原因是CentOS7中的安全模塊selinux把權限禁掉了,至少有以下三種方式解決掛載的目錄沒有權限的問題:

  2.1 在運行容器的時候,給容器加特權,也就是加上   --privileged=true 參數:

  如下運行容器則無此問題:

docker run -it --name=master --hostname=master -v /data/share/master:/opt/share --privileged=true   centos-hadoop /bin/bash

  2.2 臨時關閉selinux:

     setenforce 0

  2.3  添加selinux規則,改變要掛載的目錄的安全性文本

  關於SElinux的知識可以去看《鳥哥的linux私房菜》

# 更改安全性文本的格式如下
chcon [-R] [-t type] [-u user] [-r role] 文件或者目錄

選頃不參數:
-R  :連同該目錄下癿次目錄也同時修改;
-t  :后面接安全性本文的類型字段!例如 httpd_sys_content_t ;
-u  :后面接身份識別,例如 system_u;
-r  :后面街覘色,例如 system_r

  根據格式我們需要更改/data/share/master的安全性文檔

chcon -Rt svirt_sandbox_file_t /data/share/master

 

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM