我需要部署Docker镜像,但我只想使用Docker run命令而不使用任何参数。
我想在运行容器时分配特殊权限。
这是我的Docker运行命令:
docker run --cap-add SYS_ADMIN --cap-add DAC_READ_SEARCH ping
但我只想使用:
docker run ping
我应该在Docker文件中做些什么更改?我不能使用Docker Compose(不是我的用例)。
我的Docker文件:
答案 0 :(得分:3)
这适用于版本2和3。例如:
version: '2'
services:
myapp:
cap_add:
- SYS_ADMIN
- DAC_READ_SEARCH
答案 1 :(得分: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。
答案 2 :(得分:0)
您不能那样做。映像无法授予自己提升的特权来控制其运行的系统;只有实际运行docker run
的管理员才能做到这一点。
最好将其包装在Docker Compose YAML文件或包含所有必需的docker run
自变量的shell脚本中。
如果您尝试通过Docker构建“帮助程序命令”,则有两件事需要记住。一个是每个可以运行Docker命令的人都对主机具有不受限制的root特权;要阻止某人退出docker run -v /:/host -u root ...
并获得对主机文件系统的无限制访问非常困难。另一个是,有很多这样的Docker选项(包括设置环境变量,卷挂载和发布端口)的设置是非常常规的,因此很难构建仅靠docker run imagename
本身就可以启动该镜像的镜像。具有完整的功能。
答案 3 :(得分: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