簡體   English   中英

確保主機名和Docker容器中的用戶名和用戶ID相同

[英]Ensure both user name and user id are the same in host and Docker container

我正在嘗試使用給定的用戶運行帶有定制映像的Docker容器。 我有一個entrypoint.sh ,它可以使用-e USER=myuser根據Docker命令行中提供的環境變量來更改正在運行的用戶。

我在主機上有相同的用戶。 這可以在不同的主機上完成,我可以確保此用戶存在於我們使用的任何主機中。 但是我遇到了麻煩,因為我無法確保該用戶的數字ID始終相同(例如1001)。 在多克爾容器執行命令行我安裝,帶一些本地文件夾-v <src>:<tgt>和在容器中的應用程序創建的附加文件夾和文件在<tgt>

問題是,盡管主機中的用戶和容器中的用戶具有相同的名稱(例如myuser ),但是其數字標識可以更改(例如,主機中的5000和容器中的1001 ),因此讀取文件時出現問題和安裝路徑下的文件夾。

確保在執行時,主機和運行容器中的用戶名和用戶ID均相同的最佳解決方案是什么?

編輯

我看到我並沒有完全解釋自己,而是混雜在一起。 我將嘗試再次解釋我的問題:

  1. 我確實創建了一個基於Linux的映像,在該映像中,我:a)以root身份安裝了一組軟件包; b)創建一個特定用戶myuser ,並在Dockerfile中使用USER <usr>切換到該用戶; c)以用戶myuser身份復制了我自己的軟件並安裝在映像中,並且該軟件必須由該用戶執行。

  2. 我在另一台機器上創建了相同的用戶myuser

  3. 從另一台計算機上的該映像啟動了一個容器,並與該容器共享了主機文件系統中的一些文件夾(由用戶myuser擁有)。

出現問題的原因是,執行容器時,用戶myuser的數字ID在Docker映像中為1001,在其他主機中為5000。

一種解決方案是在用戶在任何主機上創建用戶時,都強制數字ID相同。 問題是我不確定在運行映像的主機中這是否總是可能的。

您應該使用命令USER在Dockerfile中指定USER 選項-e USER=myuser將創建一個環境變量,但默認情況下不會更改用戶。

參考: https : //docs.docker.com/engine/reference/builder/#user

如果您使用的是基於Linux的映像(例如ubuntu),則在Dockerfile中,您將需要以下內容

sudo addgroup --gid 3000 mygroupname && 
sudo adduser --uid 4000 --gid 3000 --disabled-password --gecos "" myusername
  1. 我僅以3000和4000為例。 如果您希望它們相同,它們可以是相同的數字。
  2. 是否禁用密碼取決於您要對用戶執行的操作。
  3. gecos用於為用戶設置全名,房間號,工作電話等。 我們將它們全部設置為空白。 如果需要,您絕對可以將它們設置為更有用的功能。

您將不得不切換到該用戶,並可能使用該用戶的主目錄作為您的工作目錄。 Dockerfile中的行為:

USER myusername
WORKDIR /home/myusername

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM