Docker:如何为本地用户授予root权限?
我正在运行一个内置Docker,如下所示:Docker:如何为本地用户授予root权限?,docker,jenkins,sudo,ubuntu-18.04,Docker,Jenkins,Sudo,Ubuntu 18.04,我正在运行一个内置Docker,如下所示: docker run --user $(id -u):$(id -g) --rm --network=host -v `pwd`:${SRC_MOUNT_DIR} my-image:latest my-build-script.sh 我将本地用户设置为--user,以避免根用户拥有的文件出现在我的主目录中 现在,问题是我需要在构建脚本中使用sudoapt install来安装来自其他构建的一些依赖项,但这需要root用户 我怎么安排呢?我猜不可能让s
docker run --user $(id -u):$(id -g) --rm --network=host -v `pwd`:${SRC_MOUNT_DIR} my-image:latest my-build-script.sh
我将本地用户设置为--user
,以避免根用户拥有的文件出现在我的主目录中
现在,问题是我需要在构建脚本中使用sudoapt install
来安装来自其他构建的一些依赖项,但这需要root用户
我怎么安排呢?我猜不可能让
sudo
在没有密码的情况下为所有可能的用户工作。如果容器中的用户可以运行sudo apt install…
,那么您也可以以root用户身份运行容器中的所有内容,因为任何攻击都可能只是sudo…
任何攻击代码。相反:
- 考虑是否需要在容器中安装
,或者是否可以在图像中安装。最好在映像中安装二进制文件并进行部署,而不是在每次运行容器时重新安装应用程序apt
- 如果您有一个在启动时需要root的用例,那么以root身份启动容器,然后在完成这些root步骤后将其交给用户。像
这样的工具就是为此精心设计的。作为一个入口点的例子,我有一个docker基本映像,带有一个添加了gosu
的,并运行带有gosu
的CMD,以避免将exec
作为pid 1(这有助于信号处理)/bin/sh
Gosu可在以下位置找到:您是如何将依赖项添加到正在运行的容器中的?这似乎是您在构建容器映像时所做的事情。我们正在开发一个库,然后有一些“客户项目”正在使用该库。我正在将库安装为Deb存档。当然,所有其他系统依赖项都在容器中。这有什么意义吗?你可能是对的,这是一种反模式。我仍然不想在每次提交时都构建一个新的容器映像。现在只有一个容器映像只包含开发工具。这听起来是错误的做法,但也许有人会指出一种方法。如果您使用的是主机文件系统、网络和用户ID空间,Docker并没有真正为您提供太多的隔离。你能直接在主机上工作吗?每次提交构建一个新映像是非常典型的Docker实践。