【问题标题】:Different file owner inside Docker container and in host machineDocker 容器和主机中的不同文件所有者
【发布时间】:2017-07-26 06:31:14
【问题描述】:

我遇到了一个与 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

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

【问题讨论】:

    标签: linux docker devops


    【解决方案1】:

    文件系统,至少在类 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
    

    【讨论】:

      猜你喜欢
      • 2018-05-18
      • 1970-01-01
      • 2017-04-26
      • 1970-01-01
      • 2015-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多