在浏览docker文档时,我遇到了来自(https://docs.docker.com/engine/reference/commandline/run/)的docker run命令选项。
我不明白提供的ro, rw, and z
选项之间的差异.-
$ docker run --volumes-from ba8c0c54f0f2:ro -i -t ubuntu pwd
在上面的命令中,ro
选项被z
替换。如果有人探讨使用这些选项的不同之处,我将感激不尽。
答案 0 :(得分:34)
两个后缀:z或:Z可以添加到卷装入。这些后缀告诉Docker重新标记共享卷上的文件对象。 ' z'选项告诉Docker卷内容将在容器之间共享。 Docker将使用共享内容标签标记内容。共享卷标签允许所有容器读/写内容。 ' Z'选项告诉Docker使用私有非共享标签标记内容。
如果使用selinux,则可以添加z或Z选项以修改要装入容器的主机文件或目录的selinux标签。这会影响主机本身的文件或目录,并且可能会产生Docker范围之外的后果。
z选项表示绑定装载内容在多个容器之间共享。 Z选项表示绑定装载内容是私有且非共享的。 请谨慎使用这些选项。使用Z选项绑定安装系统目录(例如/ home或/ usr)会导致主机无法运行,您可能需要手动重新标记主机文件。
$ docker run -d \ - \ --name devtest \ -v" $(pwd)" / target:/ app:z \ nginx的:最新
https://docs.docker.com/storage/bind-mounts/#configure-bind-propagation
答案 1 :(得分:2)
从我机器上的测试中,-z
使您可以与另一个容器共享内容。假设这张图片:
FROM alpine
RUN mkdir -p /var/www/html \
&& echo "foo" > /var/www/html/index.html
让我们构建它并标记为 test-z :
$ docker build . -t test-z
现在创建并运行名为 testing-z 的 test-z 容器,将卷 test-vol 映射到 / var / www / html 并添加 z 修饰符
$ docker run \
--name testing-z \
--volume test-vol:/var/www/html:z \
-d test-z tail -f /dev/null
testing-z 中 / var / www / html 的内容可以使用-volumes-from 从其他容器访问>标志,如下所示:
$ docker run --rm --volumes-from testing-z -it nginx sh
# cat /var/www/html/index.html
foo
不好。:我正在运行Docker 19.03.5-ce版本,版本633a0ea838
答案 2 :(得分:2)
我做了以下观察:
# docker run --rm -ti -v /host/path/to/flyway/scripts:/flyway/sql:z --entrypoint '' flyway/flyway ls -l /flyway/sql
total 0
# docker run --rm -ti -v /host/path/to/flyway/scripts:/flyway/sql --entrypoint '' flyway/flyway ls -l /flyway/sql
ls: cannot open directory '/flyway/sql': Permission denied
因此,在这种情况下,只有设置:z
时容器才能工作。在此主机上,安装了SELinux。如果不是这种情况,:z
对我来说就没有明显的作用。
除了:z
之外,还可以在主机文件夹上使用chcon
来更改此权限:
# chcon -t svirt_sandbox_file_t /host/path/to/flyway/scripts
# docker run --rm -ti -v /host/path/to/flyway/scripts:/flyway/sql:z --entrypoint '' flyway/flyway ls -l /flyway/sql
total 0
# docker run --rm -ti -v /host/path/to/flyway/scripts:/flyway/sql --entrypoint '' flyway/flyway ls -l /flyway/sql
total 0
答案 3 :(得分:1)
docker run --volumes-from a64f10cd5f0e:z -i -t rhel6 bin/bash
我测试了它,我已经安装在一个容器中,从那个容器安装到另一个新容器中。 IT配备rw选项