2017-06-15 41 views
0

我試圖在Docker容器中包含複雜應用程序的依賴關係,但讓它在我自己的文件上運行,而不會在最後衝突UID。從本質上講,我想運行是這樣的:用我自己的權限運行碼頭容器

docker run \ 
    --rm \ 
    --volume $HOME/playbook:/playbook --workdir /playbook \ 
    --user $(id --user) \ 
    container_image 

然而,這種失敗,因爲應用程序需要提供的UID對應於用戶名:

getpwuid(): uid not found: 1000 

最後我把這個在Dockerfile

RUN \ 
    for uid in seq 1000 1010; do \ 
     adduser --home /tmp/user_$uid --uid $uid user_$uid; \ 
    done 

有沒有更好的解決方案?

+0

另一種解決方案可能是設置一個目錄服務器。除非你有一些非常具體的要求,否則LDAP可能是最明智的選擇。 –

+0

用戶名空間可以是一個選項。目前用戶名空間在守護程序級別可用,我想有計劃在容器級別添加它。 – Sreeni

回答

1

對於東西多一點便攜,你可以掛載/ etc/passwd和/ etc/group文件放入容器爲只讀文件:

docker run \ 
    --rm \ 
    --volume $HOME/playbook:/playbook --workdir /playbook \ 
    --user $(id --user) \ 
    --volume /etc/passwd:/etc/passwd:ro \ 
    --volume /etc/group:/etc/group:ro \ 
    container_image 

兩個缺點是,如果容器期望它自己的用戶名被定義,並且來自圖像的文件許可可能具有錯誤的或缺失的用戶/組定義。