docker容器的volumes-from选项中的'z'标志是什么?

问题描述 投票:0回答:4

在浏览 docker 文档时,我遇到了 docker run 命令的volumes-from (https://docs.docker.com/engine/reference/commandline/run/)选项。 我不明白提供的

ro, rw, and z
选项之间的区别-
$ docker run --volumes-from ba8c0c54f0f2:ro -i -t ubuntu pwd

在上面的命令中,
ro
选项被替换为
z
。如果有人探索使用这些选项的差异,我将不胜感激。

docker
4个回答
142
投票

卷挂载可以添加两个后缀

:z
:Z
。这些后缀告诉 Docker 重新标记共享卷上的文件对象。
z
选项告诉 Docker 卷内容将在容器之间共享。 Docker 将使用共享内容标签来标记内容。共享卷标签允许所有容器读取/写入内容。
Z
选项告诉 Docker 使用私有非共享标签来标记内容。

https://github.com/moby/moby/blob/e6473011583967df4aa5a62f173fb421cae2bb1e/docs/sources/reference/commandline/cli.md

如果您使用selinux,您可以添加

z
Z
选项来修改要挂载到容器中的主机文件或目录的selinux 标签。这会影响主机本身上的文件或目录,并可能在 Docker 范围之外产生影响。

z
选项表示绑定挂载内容在多个容器之间共享。
Z
选项表示绑定挂载内容是私有且不共享的。 使用这些选项时要格外小心。使用
/home
选项绑定安装系统目录(例如
/usr
Z
)会使您的主机无法操作,您可能需要手动重新标记主机文件。

$ docker run -d \
  -it \
  --name devtest \
  -v "$(pwd)"/target:/app:z \
  nginx:latest

https://docs.docker.com/storage/bind-mounts/#configure-bind-propagation


8
投票

根据我机器上的测试,

-z
可以让您与另一个容器共享一个容器中的内容。假设这个图像:

FROM alpine
RUN mkdir -p /var/www/html \
    && echo "foo" > /var/www/html/index.html

让我们构建它并标记为 test-z:

$ docker build . -t test-z

现在创建并运行名为 testing-ztest-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

可以使用 --volumes-from 标志从其他容器访问 testing-z 中的 /var/www/html 的内容,如下所示:

$ docker run --rm --volumes-from testing-z -it nginx sh
# cat /var/www/html/index.html
foo

观察:我正在运行 Docker 版本 19.03.5-ce,内部版本 633a0ea838


4
投票
docker run --volumes-from a64f10cd5f0e:z -i -t rhel6 bin/bash

我已经测试过它,我已安装在一个容器中,然后从该容器安装到另一个新容器中。 IT 与 rw 选项一起使用


4
投票

我做了以下观察:

# 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
© www.soinside.com 2019 - 2024. All rights reserved.