Fedora

在多個容器與 SELinux 之間共享主機目錄

  • March 20, 2016

與 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。否則就像猜測一樣。

引用自:https://unix.stackexchange.com/questions/270950