gpt4 book ai didi

docker - 如何以 root 用户身份(最初)为其他非 root 用户容器执行某些操作?

转载 作者:行者123 更新时间:2023-12-02 19:00:05 27 4
gpt4 key购买 nike

我想将主机的用户/组与 docker 机器同步,以使(开发人员)能够编辑容器内部或外部的文件。有一些这样的想法:Handling Permissions with Docker Volumes这会创建一个新用户。

我想尝试类似的方法,但我不想创建新用户,而是想使用 usermod 修改现有用户:

usermod -d /${tmp} docker # avoid `usermod` from modifying permissions automatically.
usermod -u "${HOST_USER_ID}" docker
groupmod -g "${HOST_GROUP_ID}" docker
usermod -d ${HOME} docker

这个想法似乎可行,但是当容器以 docker 用户身份运行时(这是我想要的), usermod提示“此用户正在运行一个进程,因此无法更改用户 ID”。

如果添加 sudo ,它会更改用户 ID,但会在下一个 sudo 中断会出现以下异常: sudo: unknown uid 1000: who are you?作为回避上述问题的结果。
sudo usermod -d /${tmp} docker
sudo usermod -u "${HOST_USER_ID}" docker
sudo groupmod -g "${HOST_GROUP_ID}" docker # `sudo: unknown uid 1000: who are you?`
sudo usermod -d ${HOME} docker # `sudo: unknown uid 1000: who are you?`

是否可以以 root 的形式运行某些东西?当容器启动时,以及作为普通用户的引导脚本?看起来像 Dockerfile 的 CMD不执行两个命令;我也不能将多个命令合并到一个脚本中,因为我需要以两个用户的身份运行 - 或者我可以吗?我知道我可以创建不同的图像,但想知道是否有更清洁的替代方案。

最佳答案

您可以将容器启动为 root , 允许 ENTRYPOINT脚本来执行您想要的任何更改,然后在执行容器时切换到非特权用户 CMD .例如,使用 ENTRYPOINT脚本是这样的:

#!/bin/sh

usermod -d /${tmp} docker
usermod -u "${HOST_USER_ID}" docker
groupmod -g "${HOST_GROUP_ID}" docker

exec runuser -u docker -- "$@"

如果您没有 runuser命令,您可以使用 su 获得类似的行为.

关于docker - 如何以 root 用户身份(最初)为其他非 root 用户容器执行某些操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61366559/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com