相关文档
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
答案 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权限
0755表示公共(任何人)读取和执行。 execute允许您执行mkdir
命令
如果您安装没有公共访问权限的路径或文件夹,那么您将看到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