文件作爲根我使用泊塢(1.3.1)建立一個容器內的RPM:碼頭工人創造了安裝的卷
docker run -v /home/matt/build:/build build-rpm /build/build-pkg.sh
這工作正常(我的用戶是docker
組中,所以我不不需要sudo)並在當前目錄中刪除一個完整的.rpm
文件。問題是該文件被創建爲擁有的根。
如何安排它,以便在運行docker時由同一用戶創建文件?
文件作爲根我使用泊塢(1.3.1)建立一個容器內的RPM:碼頭工人創造了安裝的卷
docker run -v /home/matt/build:/build build-rpm /build/build-pkg.sh
這工作正常(我的用戶是docker
組中,所以我不不需要sudo)並在當前目錄中刪除一個完整的.rpm
文件。問題是該文件被創建爲擁有的根。
如何安排它,以便在運行docker時由同一用戶創建文件?
Docker以root用戶身份運行,並且不知道用戶在其虛擬環境中的內容(即使您在sudoers組中)。但是你可以在創建一個非root用戶的同時建立你可以隨意調用的docker鏡像。
# create a non-root user named tester,
# give them the password "tester" put them in the sudo group
RUN useradd -d /home/tester -m -s /bin/bash tester && echo "tester:tester" | chpasswd && adduser tester sudo
# start working in the "tester" home directory
WORKDIR /home/tester
COPY ./src
# Make the files owned by tester
RUN chown -R tester:tester /home/tester
# Switch to your new user in the docker image
USER tester
我並不太擔心容器對容器內的用戶有何想法。但是,從主機角度來看,我希望文件最終由啓動'docker run'命令的用戶擁有。這種方法會對此有所幫助嗎? –
除非您使用相同的UID和GID將其複製回您的機器,否則該文件不會歸您所有。 http://superuser.com/questions/580592/does-file-user-ownership-change-when-transferring-files-between-computers –
我想。我已經習慣了簡單的故事在Vagrant虛擬機上操作'/ vagrant':客戶對文件所有者的看法與主機不同。 –
你可以嘗試創建(在自定義圖像的Dockerfile)的用戶,並設置爲使用的容器
RUN adduser --system --group --shell /bin/sh auser \
&& mkdir /home/auser/bin
USER auser
然後檢查是否有docker run -v /home/matt/build:/build build-rpm
坐騎共享文件夾中的一個/構建爲auser
。
在issue 2259提到的另一種選擇:
如果
chown
綁定安裝前的體積(在主機端),它會工作。
在這種情況下,你可以這樣做:
mkdir /tmp/www
chown 101:101 /tmp/www
docker run -v /tmp/www:/var/www ubuntu stat -c "%U %G" /var/www
(假設
101:101
是www-data
用戶在容器中的UID:GID
)
請注意,父文件夾(如果有)將屬於根目錄。在你的例子中,沒有,但它很好知道。 –
「,使創建的文件將擁有的通過與我運行docker相同的用戶「但是這是docker虛擬環境中的根,它不知道你的用戶是什麼。 –
看到我對這個問題的回答 - http://stackoverflow.com/questions/27925006/using-host-environment-variables-with-dockerfile – ISanych
@PaulOliver在Docker容器中運行的進程不知道我的主機用戶是什麼,就像他們不知道我在主機上安裝音量的位置。但是,Docker確實讓我指定了卷在主機上的位置;同樣,我可以指定什麼(主機)用戶新文件被創建爲? –