从 Docker 容器内部对已安装卷的更改看起来就像是由普通用户执行的,同时还保留 root 权限

从 Docker 容器内部对已安装卷的更改看起来就像是由普通用户执行的,同时还保留 root 权限

如果我使用--user的参数docker run,更改(例如简单的更改mkdir)将显示为由该(非 root)用户执行。但是,我将无法像apt在容器内那样运行命令,因为它们需要 root 权限。默认情况下,没有预安装sudoDockerdebian镜像ubuntu

解决这个问题的优雅方法是什么?

答案1

如果你知道的话什么时候在哪里更改将被写入,chown之后您可以在这些文件上使用:

  • 使用参数将主机(非 root)用户的用户和组 ID ( id -u, ) 传递到 Docker 容器id -g--env
  • 以 root 身份运行命令/脚本(在容器内)
  • 最后,运行chown(仍在容器内)以使更改看起来像是由主机用户执行的

答案2

我不认为这是一个特别优雅的解决方案,但可以在容器内创建一个虚拟用户,其用户和组 ID 与(非 root)主机用户的用户和组 ID 匹配:

  • 使用参数将主机(非 root)用户的用户和组 ID ( id -u, ) 传递到 Docker 容器id -g--env
  • 创建与主机(非 root)用户的组 ID 匹配的新组

    addgroup --gid $DUMMY_GID dummy
    
  • 创建与主机(非 root)用户的用户 ID 匹配的新用户

    adduser --uid $DUMMY_UID --gid $DUMMY_GID --disabled-password --gecos "" dummy
    
  • 需要root权限的命令才可以工作

  • 运行其他命令/脚本runuser

    runuser -u dummy -- command
    

相关内容