在我的docker容器中,我从entrypoint.sh
以类似于此的特定用户身份运行命令:
sudo -u appuser "$@"
这样可以正常工作,但是,它不会设置在运行容器时使用--link
选项创建的任何环境变量。
问题
是否可以将root用户存在的所有环境变量设置为其他特定用户(在此示例中为appuser
)
注意:本次讨论的相关问题。这就是我不能只使用USER
命令How to give non-root user in Docker container access to a volume mounted on the host
答案 0 :(得分:2)
sudo
命令,因为它被设计为权限提升工具,故意在切换到新用户ID之前清理环境。如果你看一下sudo
手册页,你会发现:
-E, --preserve-env Indicates to the security policy that the user wishes to preserve their existing environment variables. The security policy may return an error if the user does not have permission to preserve the environment.
因此,只需使用sudo -u appuser somecommand
而不是sudo -E -u appuser somecommand
。
runuser
命令由最新版本的Ubuntu中的util-linux
包提供,默认情况下不执行任何环境初始化。例如:
$ docker pull ubuntu
$ docker run -it --rm ubuntu /bin/bash
root@ded49ffde72e:/# runuser --help
Usage:
runuser [options] -u <user> <command>
runuser [options] [-] [<user> [<argument>...]]
[...]
这适用于Ubuntu Xenial(runuser
命令似乎也可以在ubuntu:vivid
上使用,但不在<{1}}下。
所以你的选择是:
ubuntu:trusty
或