文件夾/文件上的 OWNER USER 錯誤: docker run -v <host_path_dir_file>:<docker_some_path_dir_file>/ not working for user defined in …
主機作業系統: Red Hat Enterprise Linux Server 7.9版(Maipo)
來賓作業系統,即執行的 Docker 容器:OpenSuse 15.2
Docker 版本(在主機上):Docker 版本 19.03.5,建構 633a0ea
在主機上,當我 git 複製儲存庫“utilities_scripts”時,我對使用者具有有效訪問權限(由於 umask)。
docker run ...
我認為這裡的問題與權限無關,但是當我發出以下命令時,為什麼 Dockerfile 中定義的 USER 沒有被設置為 docker 容器內的文件夾/文件(正在掛載)的所有者。設置 755/775 等不是一個選項,因為我不能在容器內以目標 docker 使用者的身份 chown 並且設置 777 是不好的做法。注意:
- 當我從不同的 Linux 機器嘗試相同的 docker 映像時,文件夾/文件作為使用者“ docker_non_root_user ”安裝,該使用者在 Dockerfile 中定義為
USER docker_non_root_user
.docker build ...
成功執行並創建映像,並且容器在另一台機器上工作(當我使用-v <host>:<container>
docker CLI 選項語法將 git clone 儲存庫安裝在容器內時。來自 Dockerfile 的程式碼片段是:
# Define any mount points references VOLUME ["/home/docker_non_root_user/git"] USER docker_non_root_user WORKDIR /home/docker_non_root_user/git
這是我在存在 Dockerfile
USER ...
所有權問題的主機上看到的:[gigauser@jenkins-projectABC bitbucket_workspace]$ whoami gigauser [gigauser@jenkins-projectABC bitbucket_workspace]$ id uid=gigauser(gigauser) gid=21520(jenkins) groups=21520(jenkins),3000(ectx) [gigauser@jenkins-projectABC bitbucket_workspace]$ umask 0077 [gigauser@jenkins-projectABC bitbucket_workspace]$ ls -l total 12 drwx------ 5 gigauser jenkins 4096 Feb 3 16:36 utilities_scripts [gigauser@jenkins-projectABC bitbucket_workspace]$ [gigauser@jenkins-projectABC bitbucket_workspace]$ sudo docker image ls Active Directory Password: REPOSITORY TAG IMAGE ID CREATED SIZE project-im-opensuse 15.2 0c9ee31464cd 43 hours ago 2.39GB [gigauser@jenkins-projectABC bitbucket_workspace]$ [gigauser@jenkins-projectABC bitbucket_workspace]$ [gigauser@jenkins-projectABC bitbucket_workspace]$ sudo docker run -v $PWD/utilities_scripts:/home/docker_non_root_user/git/utilities_scripts/ -it project-im-opensuse:15.2 bash -c "whoami; id; which bash; bash --version; ls -l; echo; ls -l utilities_scripts; ls -l /home/docker_non_root_user/git/utilities_scripts; id gigauser; echo" WARNING: IPv4 forwarding is disabled. Networking will not work. docker_non_root_user uid=1000(docker_non_root_user) gid=487(docker_non_root_user) groups=487(docker_non_root_user),100(users) /bin/bash GNU bash, version 4.4.23(1)-release (x86_64-suse-linux-gnu) Copyright (C) 2016 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> This is free software; you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. total 8 drwx------ 5 gigauser 21520 4096 Feb 4 00:36 utilities_scripts ls: cannot open directory 'utilities_scripts': Permission denied ls: cannot open directory '/home/docker_non_root_user/git/utilities_scripts': Permission denied id: 'gigauser': no such user [gigauser@jenkins-projectABC bitbucket_workspace]$
當我在其他 Linux 機器上執行相同的命令時,我看到掛載
utilities_scripts
文件夾的所有者是docker_non_root_user
.問題:為什麼我看到主機使用者的 USER-ID(我在其中執行docker run命令)設置在 docker 容器中的 utility_scripts 文件夾中,而Dockerfile中沒有創建這樣的使用者 ID/容器內不存在此類使用者 ID?(見上面輸出中的倒數第二行)。它目前在 docker 容器內獲得相同主機的所有者和文件夾級別權限。
gigauser
即主機的使用者,不在docker容器中,但文件ls -l
輸出顯示是容器中文件夾/文件gigauser
的所有者。utilities_scripts
此問題不會出現在其他主機上。我什至檢查了
/etc/subuid
文件,對我來說看起來不錯。將內部的值更改為 docker 的使用者並沒有幫助。我也沒有在/etc/docker/daemon.json
文件中看到與此相關的任何內容。$ cat /etc/subuid gigauser:165536:65536
docker run ....options
從另一台 Linux 主機執行上述相同的命令,它顯示 docker 容器內的文件夾所有權為:drwx------ 5 docker_non_root_user 1000 272 Jan 26 21:52 utilities_scripts
我不完全確定我是否遵循您的問題,因為這對我來說有點不清楚。但是,據我了解:
您的
gigauser
數字 ID 不是1000
,它看起來可能是21520
。它可以在另一台主機上執行,因為您的本地使用者可能有數字 ID1000
。您會看到主機的使用者 ID,因為您正在安裝文件夾,而不是複制它。當您掛載它時,它會以與主機上設置的完全相同的權限/ID 共享到容器中 - 因為它在主機上。容器不像具有完全獨立資源的虛擬機,即使在虛擬機上,如果您掛載類似 NFS 目錄的東西,您將獲得可能與本地 ID 匹配或不匹配的數字 ID。
使用
/etc/subuid
需要將標誌傳遞給執行命令,並且您必須進行數學運算才能為使用者計算出偏移量。