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

时间:2017-03-06 11:41:59

标签: linux docker devops

我正面临与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,但是,相同的文件在我的主机中显示为所有者roggerfernandesgitlab-runner必须是在Docker容器和主机中创建的文件的所有者。

1 个答案:

答案 0 :(得分:2)

文件系统,至少在类似Unix和Linux的系统(包括macOS)中,文件所有者是一个数字,而不是名称。 ls等各种工具会将数字转换为名称以方便使用,但它仍然只是一个数字。容器中的用户gitlab-runner和主机系统上的用户roggerfernandes具有相同的UID。您可以通过运行id命令找到数字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,以便在创建用户时指定其uid。例如:

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