AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 1093422
Accepted
AKS
AKS
Asked: 2022-02-12 12:46:20 +0800 CST2022-02-12 12:46:20 +0800 CST 2022-02-12 12:46:20 +0800 CST

文件夹/文件上的 OWNER USER 错误: docker run -v <host_path_dir_file>:<docker_some_path_dir_file>/ not working for user defined in Dockerfile

  • 772

主机操作系统: Red Hat Enterprise Linux Server 7.9版(Maipo)

来宾操作系统,即运行的 Docker 容器:OpenSuse 15.2

Docker 版本(在主机上):Docker 版本 19.03.5,构建 633a0ea

在主机上,当我 git 克隆存储库“utilities_scripts”时,我对用户具有有效访问权限(由于 umask)。

  • docker run ...我认为这里的问题与权限无关,但是当我发出以下命令时,为什么 Dockerfile 中定义的 USER 没有被设置为 docker 容器内的文件夹/文件(正在挂载)的所有者。设置 755/775 等不是一个选项,因为我不能在容器内以目标 docker 用户的身份 chown 并且设置 777 是不好的做法。

注意:

  1. 当我从不同的 Linux 机器尝试相同的 docker 映像时,文件夹/文件作为用户“ docker_non_root_user ”安装,该用户在 Dockerfile 中定义为USER docker_non_root_user.
  2. docker build ...成功运行并创建映像,并且容器在另一台机器上工作(当我使用-v <host>:<container>docker CLI 选项语法将 git clone 存储库安装在容器内时。

来自 Dockerfile 的代码片段是:

# Define any mount points references
VOLUME ["/home/docker_non_root_user/git"]

USER docker_non_root_user
WORKDIR /home/docker_non_root_user/git

这是我在存在 DockerfileUSER ...所有权问题的主机上看到的:

[gigauser@jenkins-projectABC bitbucket_workspace]$ whoami
gigauser
[gigauser@jenkins-projectABC bitbucket_workspace]$ id
uid=gigauser(gigauser) gid=21520(jenkins) groups=21520(jenkins),3000(ectx)

[gigauser@jenkins-projectABC bitbucket_workspace]$ umask
0077
[gigauser@jenkins-projectABC bitbucket_workspace]$ ls -l
total 12
drwx------  5 gigauser jenkins 4096 Feb  3 16:36 utilities_scripts
[gigauser@jenkins-projectABC bitbucket_workspace]$


[gigauser@jenkins-projectABC bitbucket_workspace]$ sudo docker image ls
Active Directory Password:
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
project-im-opensuse   15.2                0c9ee31464cd        43 hours ago        2.39GB
[gigauser@jenkins-projectABC bitbucket_workspace]$

[gigauser@jenkins-projectABC bitbucket_workspace]$
[gigauser@jenkins-projectABC bitbucket_workspace]$ sudo docker run -v $PWD/utilities_scripts:/home/docker_non_root_user/git/utilities_scripts/ -it project-im-opensuse:15.2 bash -c "whoami; id; which bash; bash --version; ls -l; echo; ls -l utilities_scripts; ls -l /home/docker_non_root_user/git/utilities_scripts; id gigauser; echo"

WARNING: IPv4 forwarding is disabled. Networking will not work.


docker_non_root_user
uid=1000(docker_non_root_user) gid=487(docker_non_root_user) groups=487(docker_non_root_user),100(users)

/bin/bash
GNU bash, version 4.4.23(1)-release (x86_64-suse-linux-gnu)
Copyright (C) 2016 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
total 8
drwx------ 5 gigauser 21520 4096 Feb  4 00:36 utilities_scripts

ls: cannot open directory 'utilities_scripts': Permission denied
ls: cannot open directory '/home/docker_non_root_user/git/utilities_scripts': Permission denied
id: 'gigauser': no such user

[gigauser@jenkins-projectABC bitbucket_workspace]$

当我在其他 Linux 机器上运行相同的命令时,我看到挂载utilities_scripts文件夹的所有者是docker_non_root_user.

问题:为什么我看到主机用户的 USER-ID(我在其中运行docker run命令)设置在 docker 容器中的 utility_scripts 文件夹中,而Dockerfile中没有创建这样的用户 ID/容器内不存在?(见上面输出中的倒数第二行)。它目前在 docker 容器内获得相同主机的所有者和文件夹级别权限。

gigauser即主机的用户,不在docker容器中,但文件ls -l输出显示是容器中文件夹/文件gigauser的所有者。utilities_scripts此问题不会出现在其他主机上。

我什至检查了/etc/subuid文件,对我来说看起来不错。将内部的值更改为 docker 的用户并没有帮助。我也没有在/etc/docker/daemon.json文件中看到与此相关的任何内容。

$ cat /etc/subuid
gigauser:165536:65536

docker run ....options从另一台 Linux 主机运行上述相同的命令,它显示 docker 容器内的文件夹所有权为:

drwx------ 5 docker_non_root_user 1000  272 Jan 26 21:52 utilities_scripts
linux mount permissions docker containers
  • 1 1 个回答
  • 368 Views

1 个回答

  • Voted
  1. Best Answer
    shearn89
    2022-02-15T03:47:56+08:002022-02-15T03:47:56+08:00

    我不完全确定我是否遵循您的问题,因为这对我来说有点不清楚。但是,据我了解:

    您的gigauser数字 ID 不是1000,它看起来可能是21520。它可以在另一台主机上运行,​​因为您的本地用户可能有数字 ID 1000。

    您会看到主机的用户 ID,因为您正在安装文件夹,而不是复制它。当您挂载它时,它会以与主机上设置的完全相同的权限/ID 共享到容器中 - 因为它在主机上。容器不像具有完全独立资源的虚拟机,即使在虚拟机上,如果您挂载类似 NFS 目录的东西,您将获得可能与本地 ID 匹配或不匹配的数字 ID。

    使用/etc/subuid需要将标志传递给运行命令,并且您必须进行数学运算才能为用户计算出偏移量。

    • 0

相关问题

  • 多操作系统环境的首选电子邮件客户端

  • 你最喜欢的 Linux 发行版是什么?[关闭]

  • 更改 PHP 的默认配置设置?

  • 保护新的 Ubuntu 服务器 [关闭]

  • (软)Ubuntu 7.10 上的 RAID 6,我应该迁移到 8.10 吗?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve