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