简体   繁体   English

Docker容器内部和主机中的其他文件所有者

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM