Fedora
在多個容器與 SELinux 之間共享主機目錄
與 docker 容器共享主機目錄通常很容易:
$ docker create -v /path/to/hostdir:/path/inside/container --name conta ...
如果涉及 SELinux,事情會變得更加複雜——例如,在 SELinux 執行 docker 主機(也是 Fedora 23)上執行 SELinux 執行 Fedora 23 容器。
在這種情況下,顯然,必須指示 docker 進行一些重新標記:
$ docker create -v /path/to/hostdir:/path/inside/container:Z --name conta ...
如果沒有
:Z
後綴,您在嘗試讀取/寫入共享主機目錄中的文件時會出現權限被拒絕錯誤。:Z
一切都按預期工作。但是,
:Z
如果主機目錄應該同時與多個(SELinux 強制)容器共享,則該方法會失敗:$ docker create -v /path/to/hostdir:/path/inside/container:Z --name conta ... $ docker create -v /path/to/hostdir:/path/inside/container:Z --name contb ...
在第二個命令之後,“contb”可以訪問主機目錄,但“conta”不能再訪問它(權限被拒絕錯誤)。
似乎 docker 的第二次重新標記使第一次無效。
如何在 SELinux 系統上解決此問題?
不確定它是否會有所幫助,因為我現在沒有在玩 docker,但我已經非常接近這些技術了。
Dan Walsh有一篇很好的文章,描述了命令之間
:Z
的區別。:z``docker
TL;DR,第一個 (
:Z
) 使用多類別安全 (MCS) 標籤,這將為不同的容器製作具有不同不同類別的相同標籤。第二個(
:z
)將為每個容器使用相同的標籤標記目錄,並且它們應該能夠同時訪問路徑。如果沒有幫助,請提供您從 docker 獲得的 AVC。否則就像猜測一樣。