是否有一种安全的方法可以让非root用户启动docker镜像?

时间:2018-06-15 11:38:03

标签: docker

我有一个场景,我想让非root用户启动docker镜像并运行它。这是一个非常简单的图像 - 我们有一个愚蠢的专有软件,坚持阻止某个端口,使得该软件的并发运行变得不可能。我想用docker来解决这个问题。

问题是普通用户(它是编译过程的一部分)应该能够解决这个问题。我该如何以健全和安全的方式解决这个问题?

3 个答案:

答案 0 :(得分:2)

如果所需的docker命令是静态的,请创建一个简单的启动脚本,存储在/usr/local/bin中并使其可执行。在/etc/sudoers中输入一个条目,允许所需的用户使用sudo运行此命令而无需密码。

创建文件/usr/local/bin/alpine.docker

#! /bin/sh
docker run --rm -it alpine sh

使其可执行:

chmod +x /usr/local/bin/alpine.docker

使用/etc/sudoers

visudo中创建一个条目
username  ALL = (root) NOPASSWD: /usr/local/bin/alpine.docker

现在,用户username可以在没有密码的情况下运行sudo alpine.docker

警告:

如果用户不具有root权限,请不要将用户添加到组docker

注意:

对于此解决方案,您需要安装sudo。但是,用户username不需要是群组sudo的成员。

注2:

使用policykit / pkexec可以进行类似的设置。但我并不熟悉它。

答案 1 :(得分:0)

创建泊坞窗组并将您的用户添加到泊坞窗组。

$ sudo groupadd docker
$ sudo usermod -aG docker $USER

注销并重新登录,以便重新评估您的群组成员资格。

您可以关注泊坞文档以获取更多详细信息manage-docker-as-a-non-root-user

答案 2 :(得分:0)

我更喜欢https://stackoverflow.com/a/50876910/348975解决方案,但另一种方法是使用像docker machine https://stackoverflow.com/a/50876910/348975或dind https://hub.docker.com/_/docker/这样的东西来创建一个全新的一次性码头工具。

然后设置环境变量export DOCKER_HOST = tcp:// $ {IP_ADDRESS}:2376并且可以使用没有root的那个docker

对于OP案例来说,这可能不是必需的,但如果图像必须以任意权限运行,它会派上用场:

docker container run --privileged ...

您可以从--privileged升级到root吗?我不知道你做不到。我宁愿假设你可以并且孤立码头。

由于OP有一个简单的静态预定docker命令,OP确信无法升级,我觉得https://stackoverflow.com/a/50876910/348975是首选解决方案。

如果你是偏执狂,你可以同时使用https://stackoverflow.com/a/50876910/348975和我的解决方案。