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

标签 docker

我想将主机的用户/组与 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/

相关文章:

docker - 使用 gcsfuse 在 docker 容器中挂载谷歌云存储桶

docker run git checkout 不获取分支中的更改?

database - 如何让docker等待/docker-entrypoint-initdb.d里面的SQL脚本被执行

Docker 在 Windows 上没有拉取进度条

macos - Mac 上的 Boot2Docker - 返回 bsdthread_register 错误

apache - 502 代理错误(docker + traefik + apache)

docker - 我如何查看 Docker 层中的内容?

docker - Docker在容器中启动2个进程

java - 在 AWS Fargate 中监控 JVM

macos - Vagrant 和 Docker 玩得不好