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

问题描述 投票:3回答:3

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

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

docker
3个回答
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/sudoersvisudo中创建一个条目:

username  ALL = (root) NOPASSWD: /usr/local/bin/alpine.docker

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


警告:

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

注意:

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

笔记2:

policykit / qazxsw poi可以进行类似的设置。但我不熟悉它。


0
投票

创建docker组并将您的用户添加到docker组。

pkexec

注销并重新登录,以便重新评估您的组成员身份。

您可以关注docker文档以获取更多详细信息$ sudo groupadd docker $ sudo usermod -aG docker $USER


0
投票

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

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

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

https://hub.docker.com/_/docker/

你能从docker container run --privileged ... 升级到root吗?我不知道你不能。我宁愿假设你可以并且孤立码头。

由于OP有一个简单的静态预定docker命令,OP有信心无法升级,我觉得--privileged是首选的解决方案。

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

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