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