Docker,以只读方式装入卷

我正在使用 Docker,我想挂载一个变化很大的动态文件夹(这样我就不必为每次执行都制作一个 Docker 映像,这样成本太高) ,但我希望该文件夹是只读的。将文件夹所有者更改为其他用户可以工作。但是,chown需要 root访问,我不希望将其公开给应用程序。

当我使用 -v标志挂载时,它会给出任何我给出的用户名,我在 docker 映像中创建了一个非 root 用户,但是,卷中的所有文件的所有者作为运行 docker 的用户,从命令行更改为我给出的用户,所以我不能创建只读文件和文件夹。我怎样才能阻止这一切?

我还添加了 mustafa ALL=(docker) NOPASSWD: /usr/bin/docker,所以我可以通过终端转换到另一个用户,但仍然,文件有权限为我的用户。

158628 次浏览

您可以通过将 :ro附加到 -v开关来指定卷应该是只读的:

docker run -v volume-name:/path/in/container:ro my/image

请注意,这个文件夹在容器中是只读的,在主机上是读写的。

2018编辑

根据 使用卷文档,现在有另一种方法可以使用 --mount交换机挂载卷。下面是如何使用只读方式:

$ docker run --mount source=volume-name,destination=/path/in/container,readonly my/image

码头作曲

下面是一个关于如何在 docker-compose中指定只读容器的示例:

version: "3"
services:
redis:
image: redis:alpine
read_only: true

码头作曲

以下是在 docker-compose中指定只读卷的正确方法:

说来话长

version: "3.2" # Use version 3.2 or above
services:
my_service:
image: my:image
volumes:
- type: volume
source: volume-name
target: /path/in/container
read_only: true
volumes:
volume-name:

Https://docs.docker.com/compose/compose-file/compose-file-v3/#long-syntax-3

简短的语法

:ro添加到卷装入定义:

version: "3.0" # Use version 3.0 or above
services:
my_service:
image: my:image
volumes:
- /path/on/host:/path/inside/container:ro

Https://docs.docker.com/compose/compose-file/compose-file-v3/#short-syntax-3