Docker

Podman 卷掛載:何時使用 :z 或 :Z 後綴?

  • May 24, 2021

Podman 手冊頁解釋了卷掛載/綁定:

像 SELinux 這樣的標籤系統要求在安裝到容器中的捲內容上放置適當的標籤。如果沒有標籤,安全系統可能會阻止在容器內執行的程序使用內容。預設情況下,Podman 不會更改作業系統設置的標籤。

要更改容器上下文中的標籤,您可以將兩個後綴 :z或**:Z**添加到卷掛載中。這些後綴告訴 Podman 重新標記共享卷上的文件對象。z選項告訴 Podman 兩個容器共享卷內容。因此,Podman 使用共享內容標籤標記內容。共享卷標允許所有容器讀/寫內容。Z選項告訴 Podman使用私有非共享標籤標記內容。

然而,故障排除頁面用幾乎相同的詞解釋了同樣的事情。

現在,對於 Podman 和 SELinux 來說還很陌生,想知道什麼時候我應該使用什麼?我知道,當我收到權限錯誤時,它們可能是由 SELinux 引起的,所以兩個開關之一可能會解決這個問題。但是這兩個(小寫 z 和大寫 Z)選項之間有什麼區別?

它說的區別是:

  • :z創建共享內容標籤
  • :Z創建私有非共享標籤

這引入了許多新詞:

  • 共享和非共享(這是什麼意思?)
  • ???vs private(同樣,不清楚這應該對我說什麼)
  • 它還為一個選項顯示“內容標籤”,而另一個僅顯示“標籤”——這兩個術語之間有區別還是相同?

那麼這些詞在這種情況下是什麼意思呢?最後一個問題:我什麼時候應該使用什麼?

“共享”是指多個容器可以共享卷;“未共享”表示他們不能。更詳細一點,:z使用適當的標籤 ( container_file_t) 標記每個容器內的捲,並且任何給定的捲都可以並行安裝在多個容器中,並且所有執行的具有捲安裝的容器都可以訪問它。主機或任何正在執行的容器所做的任何更改都將對所有正在執行的容器可見。

“私有”意味著此外,容器內使用的標籤對該容器是私有的。在文件系統級別沒有額外的分層,因此這實際上意味著即使從主機的角度來看,內容也被私下標記。具有相同掛載的容器不能共享對它的訪問權限——至少對於 Podman,最後一個容器獲勝,並且是唯一可以訪問該卷的容器。在我看來,這裡“私有”的反義詞是“共享”,這可以解釋為什麼文件中沒有相反的術語(“共享共享標籤”)。

我不確定“內容標籤”與“標籤”有什麼意義,除非它暗示在此類容器中創建的任何內容都將被相應標記,包括在主機中,因此您會看到帶有container_file_t標籤。

請參閱這篇文章,以更詳細地展示 Podman 上的差異Docker 也有同樣的區別

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