使用Docker文件分配其他功能

问题描述 投票:2回答:4

我需要部署Docker映像,但是我只想使用Docker run命令而不使用其任何参数。

我想在运行容器时分配特殊权限。

这是我的Docker运行命令:

docker run --cap-add SYS_ADMIN --cap-add DAC_READ_SEARCH ping

但是我只想使用:

docker run ping

我应该在Docker文件中进行哪些更改?我不能使用Docker Compose(不是我的用例)。

我的Docker文件:

“我的Docker文件为”

docker dockerfile
4个回答
2
投票

您不能那样做。映像无法授予自己提升的特权来控制其运行的系统;只有实际运行docker run的管理员才能这样做。

最好将其包装在Docker Compose YAML文件或包含所有必需的docker run参数的shell脚本中。

如果您尝试通过Docker构建“帮助程序命令”,则有两件事需要记住。一个是每个可以运行Docker命令的人都对主机具有不受限制的root特权;要阻止某人退出docker run -v /:/host -u root ...并获得对主机文件系统的无限制访问非常困难。另一个是,有很多这样的Docker选项(包括设置环境变量,卷挂载和发布端口)的设置是非常常规的,因此很难构建仅靠docker run imagename本身就可以完整显示该映像的映像。功能。


0
投票

编写类似/usr/local/sbin/docker-ping.sh的脚本:

#!/bin/sh

docker run --cap-add SYS_ADMIN --cap-add DAC_READ_SEARCH ping

然后是另一个脚本,/usr/local/bin/docker-ping

#!/bin/sh

sudo /usr/local/sbin/docker-ping.sh

最后修改适当的sudo。


0
投票

如果在系统中存在docker组,则可能不需要使用sudo命令。如this link所述,附加组docker,并将您的用户添加到该组。这样可以避免使用sudo。我刚刚测试了其他特权命令,它们对我来说没有任何问题。重复上述链接中的步骤:

sudo groupadd docker
sudo usermod -aG docker $USER

应该重新启动docker守护程序以使上述操作生效,或者重新启动计算机。

顺便说一句,问题的重点,据我所知,最好的选择是使用shell脚本启动。前面指出的方法很好,但是我将编写另一种方法,该方法允许传递任意参数,并且对于您可能需要的任何命令都更通用。

文件:privileged-wrapper.sh

#!/bin/bash
IMAGE_NAME="your_image_name"
BINARY="$0"
BINARY="${BINARY#./}"
docker run --cap-add SYS_ADMIN --cap-add DAC_READ_SEARCH --rm "$IMAGE_NAME" "$BINARY" "$@"

现在,您可以创建许多符号链接作为这些功能所需的命令(请记住,符号链接的名称是要启动到容器中的命令)。可以在PATH

。中找到要启动的命令。
chmod a+x privileged-wrapper.sh
ln -svf privileged-wrapper.sh ping

最后才启动:

./ping -c 10

0
投票

[如果有人正在寻找使用docker compose做类似事情的正确方法。 AFAK适用于版本2和3。例如:

© www.soinside.com 2019 - 2024. All rights reserved.