Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/jenkins/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Docker:如何为本地用户授予root权限?_Docker_Jenkins_Sudo_Ubuntu 18.04 - Fatal编程技术网

Docker:如何为本地用户授予root权限?

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,如下所示:

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步骤后将其交给用户。像
    gosu
    这样的工具就是为此精心设计的。作为一个入口点的例子,我有一个docker基本映像,带有一个添加了
    gosu
    的,并运行带有
    exec
    的CMD,以避免将
    /bin/sh
    作为pid 1(这有助于信号处理)


Gosu可在以下位置找到:

您是如何将依赖项添加到正在运行的容器中的?这似乎是您在构建容器映像时所做的事情。我们正在开发一个库,然后有一些“客户项目”正在使用该库。我正在将库安装为Deb存档。当然,所有其他系统依赖项都在容器中。这有什么意义吗?你可能是对的,这是一种反模式。我仍然不想在每次提交时都构建一个新的容器映像。现在只有一个容器映像只包含开发工具。这听起来是错误的做法,但也许有人会指出一种方法。如果您使用的是主机文件系统、网络和用户ID空间,Docker并没有真正为您提供太多的隔离。你能直接在主机上工作吗?每次提交构建一个新映像是非常典型的Docker实践。