Alice和Bob都是同一主机上docker组的成员。爱丽丝想在Docker容器中运行一些长时间运行的计算,然后将结果复制到她的主文件夹中。鲍勃非常爱管闲事,爱丽丝不希望他能够读取她的计算所使用的数据。
系统管理员可以采取什么措施使Bob离开Alice的docker容器?
我认为这就是Alice应该根据命名的卷和dockercp
命令从容器中进出数据的方式。
$ pwd
/home/alice
$ date > input1.txt
$ docker volume create sandbox1
sandbox1
$ docker run --name run1 -v sandbox1:/data alpine echo OK
OK
$ docker cp input1.txt run1:/data/input1.txt
$ docker run --rm -v sandbox1:/data alpine sh -c "cp /data/input1.txt /data/output1.txt && date >> /data/output1.txt"
$ docker cp run1:/data/output1.txt output1.txt
$ cat output1.txt
Thu Oct 5 16:35:30 PDT 2017
Thu Oct 5 23:36:32 UTC 2017
$ docker container rm run1
run1
$ docker volume rm sandbox1
sandbox1
$
我创建一个输入文件input1.txt
和一个命名卷sandbox1
。然后,我启动一个名称为的容器run1
,以便可以将文件复制到命名的卷中。该容器仅显示“确定”消息并退出。我复制输入文件,然后运行主要计算。在此示例中,它将输入复制到输出,并向其添加第二个时间戳。
计算完成后,我复制输出文件,然后删除容器和命名的卷。
有什么方法可以阻止Bob装载自己的容器,该容器装载了命名的卷并向其显示Alice的数据?我已经将Docker设置为使用用户名称空间,因此Alice和Bob没有对主机的根访问权限,但是我看不到如何使Alice和Bob使用不同的用户名称空间。
通过在docker
组中,Alice和Bob已被授予对主机的虚拟根访问权限。
该docker
组授予他们通过套接字文件访问Docker API的权限。Docker中目前没有工具可以区分Docker
API的用户。Docker守护程序以root身份运行,并且借助Docker API的允许,Alice和Bob将能够解决您尝试设置的所有障碍。
使用用户名称空间隔离可以阻止容器 内
的用户以特权用户或其他用户身份脱离容器,因此实际上,容器进程现在以非特权用户身份运行。
一个例子是
由于用户现在仅位于容器内,因此他们将无法修改主机上的其他文件。假设两个容器都映射了相同的主机卷,那么没有世界范围的读/写/执行的文件对于彼此来说是安全的。由于他们无法控制守护程序,因此他们无能为力。
命名空间无法保护Docker守护进程和API本身,而Docker守护进程和API本身仍然是一个特权进程。解决用户名空间的第一种方法是在命令行上设置主机名称空间:
docker run --privileged --userns=host busybox fdisk -l
的docker exec
,docker cp
并docker export
命令会给别人能够访问泊坞API创建的任何容器的内容。
可以限制对API的访问,但是您不能在docker
组中拥有具有shell访问权限的用户。
docker
通过sudo
或提供sudo
访问对docker参数进行硬编码的脚本的有限命令集:
#!/bin/sh
docker run --userns=whom image command
对于自动化系统,可以通过附加的shim API提供访问权限,并在Docker
API之前添加适当的访问控制,然后将“受控”请求传递给Docker。dockerode
或docker- py
可以轻松插入REST服务并与Docker交互。
问题内容: 我想在使用Selenium WebDriver和Docker而不是虚拟机的同一台计算机上运行多个Internet Explorer版本。据我所知,Docker完全在Linux上运行,这将使Docker中的IE无法实现。我之所以问是因为我看到Docker在Microsoft Azure上运行。 问题答案: Docker当前不适用于基于Windows的应用程序。Azure上的Docker是
问题内容: 我正在docker容器内的GCE上运行jenkins实例,并希望从此Jenkinsfile和Github执行多分支管道。我正在为此使用GCE詹金斯教程。这是我的 我总是得到一个错误: 为了使docker在jenkins中工作,我需要更改什么? 问题答案: 看起来像DiD(Docker中的Docker),最近的一期杂志指出这是有问题的。 请参阅“ 在您的CI或测试环境中使用Docker-
如何将多个标签附加到一个 Docker 映像?是否可以使用一个 Docker 文件创建多个标记? 不知何故,这是可能的;例如会得到几个图像,其中一些有多个标签:
问题内容: 我有两个要素。第一个包含国家(例如美国,加拿大,英国,俄罗斯,波兰…),第二个国家被隐藏, 仅 包含美国和加拿大(例如纽约,洛杉矶,芝加哥…或渥太华,温哥华)的城市,萨里…) 如果用户从第一个中选择“加拿大”或“美国” ,则第二个应显示并允许他选择城市。 有可能吗?我使用Ajax和JQuery Validation表单访问了许多网站,但没有找到类似的来源。 谢谢。 问题答案: 侦听选择
我在windows 10 home上工作。 当我运行docker快速启动终端快捷方式或直接运行 start.sh 时,我收到消息: Docker Machine未安装。请重新运行工具箱安装程序,然后重试。看起来“查找vboxmanage.exe”步骤出错…按任意键继续。。。 我尝试重新安装,选择了所有选项,包括NDIS5驱动程序,但我没有帮助。运动学工作正常,但我无法在终端中运行docker。 我
问题内容: 尝试遵循从Docker网站构建Docker映像的说明。 https://docs.docker.com/examples/running_redis_service/ 这是我将遵循文档上的说明并使用此Dockerfile的错误 怎么解决? 问题答案: 您需要添加一个点,例如,这意味着您在本地目录中使用Dockerfile,如果您使用docker 1.5,则可以在其他位置指定Docker