我正在使用Docker,我想安装一个变化很大的dyanmic文件夹(所以我不必为每个执行器生成docker,这会太昂贵),但是我希望该文件夹只读取。然而,将文件夹所有者更改为其他人的工作chown
需要root
访问权限,我不希望将其公开给应用程序。
当我使用-v
标志进行挂载时,它会提供我给出的任何用户名,我在docker映像中创建了一个非root用户,但是卷中的所有文件都是作为运行docker的用户的所有者,更改为我从命令行提供的用户,因此我无法生成只读文件和文件夹。我怎么能阻止这个?
我还添加了mustafa ALL=(docker) NOPASSWD: /usr/bin/docker
,因此我可以通过终端更改为其他用户,但文件仍然拥有我的用户权限。
答案 0 :(得分:139)
您可以通过将:ro
附加到-v
开关来指定卷应该是只读的:
docker run -v volume-name:/path/in/container:ro my/image
请注意,该文件夹在容器中是只读的,在主机上是可读写的。
根据Use volumes documentation,现在有另一种使用--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
答案 1 :(得分:1)
这是在docker-compose
中指定只读容器的正确方法:
version: "3"
services:
my_service:
image: my:image
volumes:
- type: volume
source: volume-name
target: /path/in/container
read_only: true
volumes:
volume-name: