如何设置将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:trustyubuntu:trusty )。

所以你的select是:

  • 使用sudo -E或者
  • 使用更新的Ubuntu映像