2016年10月31日 星期一

[ 常見問題 ] 在 container 裡面存取 host 檔案遇到 Permission denied?

Source From Here
Question
最近在用 docker 建立專案編譯的環境,在 docker run 裡用 -v 指令將本地端的 ~/p4 目錄掛載到 container 裡的 /p4 使用,好讓 container 裡面可以存取到外面的原始碼:
# docker run -it -v ~/p4:/p4 testuser/build_prj /bin/bash

檔案掛載沒有問題,但是進到 container 裡面想要 ls 一下,卻出現了 Permission denied 的問題:
root@b9f5a339508b /p4 # ls
ls: cannot open directory .: Permission denied

查了一下,原來是 SELinux 的影響:

How-To
要解決這個問題,在 -v 參數的最後面,加上 :z 或是 :Z,分別代表的是:
* :z 會 label 這個目錄,使其可以被多個 container 共用
* :Z 會 label 這個目錄,使其可以被目前的 container 使用 (其他 container 不能共用)

加上 :z 或 :Z 後,docker 會幫我們 label 由這個目錄掛載起來的 volume,因此 container 裡面就不會被 SELinux 阻擋存取 volume 的資料了. 舉例來說,我可以把一開始的 docker run 指令改成下面這樣:
# docker run -it -v ~/p4:/p4:z testuser/build_prj /bin/bash

接著在 container 裡面,就能成功的存取 /p4 的檔案了:
root@fe90d2001d04 /p4 # ll

total 260
drwxrwxr-x. 9 1000 1000 4096 Sep 17 09:26 Common
-r--r--r--. 1 1000 1000 13415 Oct 1 16:40 Makefile


沒有留言:

張貼留言

[Git 常見問題] error: The following untracked working tree files would be overwritten by merge

  Source From  Here 方案1: // x -----删除忽略文件已经对 git 来说不识别的文件 // d -----删除未被添加到 git 的路径中的文件 // f -----强制运行 #   git clean -d -fx 方案2: 今天在服务器上  gi...