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

Amei1314發表於2016-08-07

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

 

  

相關文章