[英]Different file owner inside Docker container and in host machine
I am facing a issue related to Docker users. 我面临与Docker用户相关的问题。 I run my container as gitlab-runner
using the following command: 我使用以下命令将容器作为gitlab-runner
运行:
docker run --name testes_cashlink --hostname testes_cashlink --user gitlab-runner --privileged -t -v $DIR_TESTES:/cashlink_host -v $DIR_BATS:/bats -v $DIR_PROJETO:/cashlink_war docker-cashlink-ci /bats/run.sh
The files created inside the docker container show owner gitlab-runner
, however, the same files show in my host machine as owner roggerfernandes
. 在gitlab-runner
容器中创建的文件显示所有者gitlab-runner
,但是,在我的主机中显示的文件与所有者roggerfernandes
。 gitlab-runner
must be the owner of files created inside Docker container as well as host machine. gitlab-runner
必须是在Docker容器以及主机中创建的文件的所有者。
Filesystems, at least in Unix- and Linux-like systems (including macOS), file owners are a number, not a name. 文件系统,至少在Unix和Linux类系统(包括macOS)中,文件所有者是一个数字,而不是名称。 Various tools such as ls
will translate the number into a name for convenience, but it is still just a number. 为了方便起见,诸如ls
各种工具会将数字转换为名称,但它仍然只是数字。 Your user gitlab-runner
in the container, and the user roggerfernandes
on the host system, have the same UID. 容器中的用户gitlab-runner
和主机系统上的用户roggerfernandes
具有相同的UID。 You can find the numeric ID by running the id
command. 您可以通过运行id
命令找到数字ID。
Here it is on my laptop (reformatted a bit for readability): 它在我的笔记本电脑上(为了便于阅读,对其进行了重新格式化):
$ id
uid=501(dan) gid=20(staff) groups=20(staff),12(everyone),61(localaccounts),
79(_appserverusr),80(admin),81(_appserveradm),98(_lpadmin),501(access_bpf),
33(_appstore),100(_lpoperator),204(_developer),395(com.apple.access_ftp),
398(com.apple.access_screensharing),399(com.apple.access_ssh)
Here you see at the beginning my UID is 501. 在开始时,您会看到我的UID是501。
You can also run this command with a username, eg id gitlab-runner
inside the container. 您也可以使用用户名(例如,容器内的id gitlab-runner
运行此命令。
docker exec testes_cashlink id gitlab-runner
So when the user in the container owns a file, it is stored as a numeric ID (quite likely 1000, a common default). 因此,当容器中的用户拥有文件时,该文件将存储为数字ID(很可能是1000,这是常见的默认设置)。 When you look on your host system, the mechanism that translates the number into a username just has a different username in its result than you would see inside the container. 当您查看主机系统时,将数字转换为用户名的机制的结果与在容器内部看到的用户名不同。
If you need a specific user ID inside the container, you need to modify your Dockerfile so that when creating the user, you specify its uid. 如果在容器内需要特定的用户ID,则需要修改Dockerfile,以便在创建用户时指定其uid。 For example: 例如:
RUN useradd -u 1005 <other options> gitlab-runner
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.