码头工人只读装载在码头工人中意味着什么?

时间:2020-02-07 20:15:08

标签: docker

相关文档

https://docs.docker.com/storage/bind-mounts/

对于某些开发应用程序,容器需要写入 绑定安装,因此更改将传播回Docker主机。在 其他时间,该容器仅需要读取访问权限。

此示例修改了上面的示例,但将目录挂载为 通过将ro添加到(默认为空)列表中,进行只读绑定安装 选项,位于容器内的安装点之后。凡多 选项,请用逗号分隔。

我希望这意味着无法从容器内部写入以这种方式安装的文件夹。但是,如果我最少修改示例以提供一个Shell会话并挂载根文件系统

~ $ docker run  \
      -it \
      --name devtest2 \
      --mount type=bind,source=/,target=/app,readonly \
      ubuntu:latest

我看到我具有写入的访问权限,以root身份访问容器内整个主机文件系统。

root@bde1f19c1de2:/# cd /app/home/
# Creates directory in the host /home folder
root@bde1f19c1de2:/app/home# mkdir patata

这意味着装载是“ readonly”。

我如何使其实际上是只读的?

我在docker 17.05上观察到了这种行为,因为它与Ubuntu trusty一起提供:

$ docker --version
Docker version 17.05.0-ce, build 89658be

1 个答案:

答案 0 :(得分:0)

我不知道如何使用--mount选项,因为它仅适用于Docker 17.06中的独立容器,而您的是17.05。 Ref

最初,-v或--volume标志用于独立容器 --mount标志用于集群服务。但是,开始 在Docker 17.06中,您也可以将--mount与独立版本一起使用 容器。通常,--mount更为明确和详细。的 最大的不同是-v语法结合了所有选项 --mount语法将它们分开。这里 是每个标志的语法比较。

那是说我在docker 17.09上试用了它,仍然看到了与您描述的相同的结果。只是意识到“ readonly选项正在工作,但是您的Linux权限却是这样,允许任何人在上面写东西!

由于您正在挂载/并写入home目录,默认情况下该目录具有0755权限https://superuser.com/questions/303910/ubuntu-default-access-mode-permissions-for-users-home-dir-home-user

0755表示公共(任何人)读取和执行。 execute允许您执行mkdir命令enter image description here

如果您安装没有公共访问权限的路径或文件夹,那么您将看到readonly选项有效,这表明它不是root用户还是不在容器内,这是不允许您写的!

示例我正在安装具有0770是公共目录的主目录,但是没有任何访问权限!

[root@jakku-admin-1 ~]# pwd
/root
[root@jakku-admin-1 ~]# ll
total 8
drwxr-xr-x. 2 root root 4096 Feb  7 21:19 archive
drwxrwx---. 2 root root 4096 Feb  7 20:38 home
[root@jakku-admin-1 ~]# docker run -it --name devtest --mount type=bind,source=`pwd`/home,target=/app,readonly ubuntu:latest
root@3ce55bba8904:/# ll
total 16
drwxr-xr-x.  22 root root  253 Feb  7 21:20 ./
drwxr-xr-x.  22 root root  253 Feb  7 21:20 ../
-rwxr-xr-x.   1 root root    0 Feb  7 21:20 .dockerenv*
drwxrwx---.   2 root root 4096 Feb  7 20:38 app/
drwxr-xr-x.   2 root root 4096 Jan 12 21:10 bin/
drwxr-xr-x.   2 root root    6 Apr 24  2018 boot/
drwxr-xr-x.   5 root root  360 Feb  7 21:20 dev/
drwxr-xr-x.  29 root root 4096 Feb  7 21:20 etc/
drwxr-xr-x.   2 root root    6 Apr 24  2018 home/
drwxr-xr-x.   8 root root   96 May 23  2017 lib/
drwxr-xr-x.   2 root root   34 Jan 12 21:10 lib64/
drwxr-xr-x.   2 root root    6 Jan 12 21:09 media/
drwxr-xr-x.   2 root root    6 Jan 12 21:09 mnt/
drwxr-xr-x.   2 root root    6 Jan 12 21:09 opt/
dr-xr-xr-x. 592 root root    0 Feb  7 21:20 proc/
drwx------.   2 root root   37 Jan 12 21:10 root/
drwxr-xr-x.   5 root root   58 Jan 16 01:20 run/
drwxr-xr-x.   2 root root 4096 Jan 16 01:20 sbin/
drwxr-xr-x.   2 root root    6 Jan 12 21:09 srv/
dr-xr-xr-x.  13 root root    0 Jan 29 22:42 sys/
drwxrwxrwt.   2 root root    6 Jan 12 21:10 tmp/
drwxr-xr-x.  10 root root  105 Jan 12 21:09 usr/
drwxr-xr-x.  11 root root  139 Jan 12 21:10 var/
root@3ce55bba8904:/# cd app/
root@3ce55bba8904:/app# ll
total 4
drwxrwx---.  2 root root 4096 Feb  7 20:38 ./
drwxr-xr-x. 22 root root  253 Feb  7 21:20 ../
root@3ce55bba8904:/app# mkdir test
mkdir: cannot create directory 'test': Read-only file system
root@3ce55bba8904:/app# touch test
touch: cannot touch 'test': Read-only file system