140

我正在使用 Docker,我想挂载一个变化很大的动态文件夹(所以我不必为每次执行制作一个 Docker 映像,这太昂贵了),但我希望该文件夹是只读的. 将文件夹所有者更改为其他人有效。但是,chown需要root访问权限,我不希望将其公开给应用程序。

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

我还添加了mustafa ALL=(docker) NOPASSWD: /usr/bin/docker,因此我可以通过终端更改为另一个用户,但是这些文件仍然对我的用户具有权限。

4

2 回答 2

228

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

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

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

2018年编辑

根据Use volumes 文档,现在有另一种使用--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
于 2013-12-01T22:11:16.957 回答
52

码头工人撰写

这是在 中指定只读卷的正确方法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

于 2019-04-19T10:43:17.453 回答