如何设置将root用户的所有环境variables复制到另一个特定的用户
在我的docker容器中,我正在像entrypoint.sh
这样的特定用户运行一个命令:
sudo -u appuser "$@"
这工作正常,但是,它不会设置运行容器时使用 – --link
选项创build的任何环境variables。
题
是否有可能将所有存在的root用户的环境variables设置为其他特定用户(在本例中为appuser
)
注意:这个讨论相关的问题。 这就是我不能只使用USER
命令的原因如何让Docker容器中的非root用户访问主机上挂载的卷
sudo
命令,因为它被devise为特权升级的工具,所以在切换到新的用户标识之前故意清理环境。 如果你看看sudo
man页面,你会发现:
-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
上可用ubuntu:vivid
,但不能在ubuntu:trusty
下ubuntu:trusty
)。
所以你的select是:
- 使用
sudo -E
或者 - 使用更新的Ubuntu映像