使用Docker文件分配其他功能

时间:2018-06-12 14:18:53

标签: docker dockerfile

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

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

这是我的Docker运行命令:

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

但我只想使用:

docker run ping

我应该在Docker文件中做些什么更改?我不能使用Docker Compose(不是我的用例)。

我的Docker文件:

My Docker file is

4 个答案:

答案 0 :(得分:3)

您可以使用docker-compose做到这一点。

这适用于版本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