Docker 如何使容器成为根文件系统r/o,但允许写入WORKDIR

Docker 如何使容器成为根文件系统r/o,但允许写入WORKDIR,docker,docker-compose,Docker,Docker Compose,我想使根文件系统成为只读文件系统,如下所示: 但是,我还需要允许容器中运行的应用程序访问其文件夹/应用程序。应用程序需要一些临时存储,但为了安全起见,我需要限制它对所有内容的访问。使用docker run-v选项装载到容器中的任何内容都不是根文件系统的一部分,可以有自己的访问模式。如果您只需要容器中的一些临时空间,那么可以使用该选项在某个地方挂载一个空的内存文件系统 $ docker run --rm --read-only busybox \ > sh -c 'touch /tmp/fo

我想使根文件系统成为只读文件系统,如下所示:


但是,我还需要允许容器中运行的应用程序访问其文件夹/应用程序。应用程序需要一些临时存储,但为了安全起见,我需要限制它对所有内容的访问。

使用docker run-v选项装载到容器中的任何内容都不是根文件系统的一部分,可以有自己的访问模式。如果您只需要容器中的一些临时空间,那么可以使用该选项在某个地方挂载一个空的内存文件系统

$ docker run --rm --read-only busybox \
> sh -c 'touch /tmp/foo && ls /tmp'
touch: /tmp/foo: Read-only file system

$ docker run --rm --read-only --tmpfs /tmp busybox \
> sh -c 'touch /tmp/foo && ls /tmp'
foo
您可以对命名卷执行相同的操作:

$ docker volume create vol
vol
$ docker run --rm --read-only -v vol:/tmp busybox touch /tmp/foo
$ docker run --rm --read-only -v vol:/tmp busybox ls /tmp
foo
您不希望对包含应用程序源代码的目录执行此操作。出于安全原因,如果您非常关心根文件系统的只读性,那么您不想冒应用程序代码被覆盖的风险。如果您的应用程序代码最终出现在一个卷中,Docker会将其视为有价值的用户数据并拒绝更新。因此,为此选择一些除/app以外的目录,只要可以开始为空,子目录/app/data就可以正常工作

$ docker volume create vol
vol
$ docker run --rm --read-only -v vol:/tmp busybox touch /tmp/foo
$ docker run --rm --read-only -v vol:/tmp busybox ls /tmp
foo