我如何使用“ docker run --user”但具有root特权

问题描述 投票:0回答:1

我有一个包含分析管道的Docker映像。要运行此管道,我需要提供输入数据,并且要保留输出。该管道必须能够由本人以外的其他用户在自己的笔记本电脑上运行。

简而言之,我的根(/)文件夹结构如下:

total 72
drwxr-xr-x   1 root   root 4096 May 29 15:38 bin
drwxr-xr-x   2 root   root 4096 Feb  1 17:09 boot
drwxr-xr-x   5 root   root  360 Jun  1 15:31 dev
drwxr-xr-x   1 root   root 4096 Jun  1 15:31 etc
drwxr-xr-x   2 root   root 4096 Feb  1 17:09 home
drwxr-xr-x   1 root   root 4096 May 29 15:49 lib
drwxr-xr-x   2 root   root 4096 Feb 24 00:00 lib64
drwxr-xr-x   2 root   root 4096 Feb 24 00:00 media
drwxr-xr-x   2 root   root 4096 Feb 24 00:00 mnt
drwxr-xr-x   1 root   root 4096 Mar 12 19:38 opt
drwxr-xr-x   1 root   root 4096 Jun  1 15:24 pipeline
dr-xr-xr-x 615 root   root    0 Jun  1 15:31 proc
drwx------   1 root   root 4096 Mar 12 19:38 root
drwxr-xr-x   3 root   root 4096 Feb 24 00:00 run
drwxr-xr-x   1 root   root 4096 May 29 15:38 sbin
drwxr-xr-x   2 root   root 4096 Feb 24 00:00 srv
dr-xr-xr-x  13 root   root    0 Apr 29 10:14 sys
drwxrwxrwt   1 root   root 4096 Jun  1 15:25 tmp
drwxr-xr-x   1 root   root 4096 Feb 24 00:00 usr
drwxr-xr-x   1 root   root 4096 Feb 24 00:00 var

管道脚本位于/ pipeline中,并通过Dockerfile中的“ COPY。/ pipeline”指令打包到映像中。

出于各种原因,设置了该管道(这是旧管道),因此输入数据必须位于诸如/ pipeline / project的文件夹中。要运行我的管道,我使用:

docker run --rm --mount type=bind,source=$(pwd),target=/pipeline/project --user "$(id -u):$(id -g)" pipelineimage:v1

换句话说,我将包含数据的文件夹安装到/ pipeline / project。我发现我需要使用--user来确保输出文件具有正确的权限-即,在容器退出后,我将对主机具有读/写/ exec访问权限。

管道正在运行,但我有一个问题:管道使用的一种特定软件会自动尝试在$ HOME中生成(但我无法更改)1个文件夹(所以,我在上面显示了-),我的WORKDIR中的1个文件夹(我在Dockerfile中将其设置为/ pipeline)。这些尝试失败了,我猜是因为我没有以root身份运行管道。但是我需要使用--user来确保我的输出具有正确的权限-即,我不需要sudo权限来读取这些输出,等等。

我的问题是:我打算如何处理?似乎通过使用--user,我为已成功创建许多输出文件的已安装文件夹(/ pipeline / projects)设置了正确的权限,在那里没有问题。但是如何确保其他2个文件夹是在该安装之外正确创建的?

我尝试了以下但未成功的方法:

  • 正在执行“ COPY -chown myhostuid:mygroupid”。 pipeline /“。这有效,但是我必须对uid和gid进行硬编码,以便在其他同事尝试运行该图像时将不起作用。
  • 添加具有sudo权限的新用户并使其运行映像:“ RUN useradd -r newuser -g sudo”(我也尝试使用“ root”组,但没有成功)。这只是给我的输出,需要sudo权限才能读取/写入/执行。这不是我想要的。

我想念什么吗?我不明白为什么对已安装文件夹的权限进行“操作”容易,而对容器中其他文件夹的处理却如此困难。谢谢。

docker permissions sudo mount
1个回答
0
投票

如果您的软件不依赖相对路径(~/./),则只需将$HOMEWORKDIR设置为任何用户都可以写入的目录:

ENV HOME=/tmp
WORKDIR /tmp

[如果无法这样做,则可以通过环境将uid / gid传递给以root身份运行的入口点脚本,必要时使用chown / chmod,然后放弃特权以运行管道(runusersusudosetuidgid)。

© www.soinside.com 2019 - 2024. All rights reserved.