Docker容器和主机中的不同文件所有者

我面临着一个与Docker用户相关的问题。 我使用以下命令作为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 

gitlab-runner容器内创build的文件显示拥有者gitlab-runner ,然而,相同的文件在我的主机上显示为拥有者roggerfernandesgitlab-runner必须是在Docker容器以及主机中创build的文件的所有者。

文件系统,至less在类Unix和Linux系统(包括macOS)中,文件所有者是一个数字,而不是一个名字。 诸如ls各种工具将会把这个数字转换成一个名字以方便起见,但它仍然只是一个数字。 容器中的用户gitlab-runner和主机系统上的用户roggerfernandes具有相同的UID。 您可以通过运行id命令find数字ID。

这是在我的笔记本电脑(为便于阅读而重新格式化):

 $ 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) 

在这里你看到我的UID是501。

你也可以用一个用户名运行这个命令,比如在容器里面用id gitlab-runner

 docker exec testes_cashlink id gitlab-runner 

所以当容器中的用户拥有一个文件时,它被存储为一个数字ID(很可能是1000,一个通用的默认值)。 当您查看主机系统时,将该数字转换为用户名的机制在其结果中具有与在容器内部看到的不同的用户名。

如果您需要在容器中使用特定的用户ID,则需要修改Dockerfile,以便在创build用户时指定其uid。 例如:

 RUN useradd -u 1005 <other options> gitlab-runner