使用 docker 命名空間重新映射時如何以特定使用者身分掛載檔案?

使用 docker 命名空間重新映射時如何以特定使用者身分掛載檔案?

問題描述:

我有一個使用 docker 運行 nginx 和 haproxy (以及其他容器)的網路服務。我想透過私人 docker hub 註冊表提供這些 docker 映像,因此不想在映像中建置任何 tls 證書,以便每個客戶都可以將自己的證書掛載到容器(nginx 和 haproxy)中。

為了保護 haproxy 容器,我在沒有 root 權限的情況下運行它(1000 以上的連接埠對應到 docker-compose 中 1000 以下的連接埠)。 nginx 容器是基於官方 nginx 映像,因此在服務啟動時僅使用 root 並隨後更改為 nginx 使用者。

為了進一步保護容器,我設定了 docker-remapping (使用預設的 Dockerremap 使用者進行預設設定)。

問題:

tls 憑證公鑰和私鑰以使用者「nobody」的身分安裝在容器中,因此 haproxy 和 nginx 容器無法讀取這些文件,因為它們使用不同的(非 root)使用者來讀取文件。

解決方案(到目前為止):

  1. 我可以讓 tls 檔案變得可讀,例如 644,這可行,但這是一個可怕的不安全解決方案。

  2. 我可以建立自己的 nginx 鏡像,就像使用 haproxy 鏡像一樣,並將容器使用者新增至無人群組,這樣我就可以將憑證權限變更為 640。

  3. 刪除 docker 重新映射,以便我可以在 nginx 和 haproxy 容器中掛載具有與使用者相同的 uid 的憑證檔案。這意味著我失去了 docker-remapping 的安全性,並且憑證檔案需要與 haproxy 和 nginx 容器中的使用者相同的 uid。

  4. 在安裝過程中(以及更新基礎映像檔或憑證檔案時)在客戶的伺服器上建立新映像,並將我的私人 Docker 儲存庫中的現有映像作為基礎映像。我的客戶伺服器上的 docker 建置檔案非常簡單,僅用於將 ssl 憑證檔案複製到具有正確權限的 contsiners 中。

問題:

有沒有辦法將主機 uid 對應到容器內使用者的 uid,以便掛載的檔案具有正確的 uid?

相關內容