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

时间:2020-03-31 19:27:42

标签: docker docker-compose

我想根据this answer将根文件系统设置为只读:

docker run --read-only ... myapp

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

1 个答案:

答案 0 :(得分:1)

使用<?xml version="1.0" encoding="UTF-8"?> <ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" xmlns:d="http://xamarin.com/schemas/2014/forms/design" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:oxy="clr-namespace:OxyPlot.Xamarin.Forms;assembly=OxyPlot.Xamarin.Forms" mc:Ignorable="d" x:Class="PieCharter.Test"> <ContentPage.Content> <ScrollView> <StackLayout> <Label Text="Some label1 " /> <Label Text="And some stuff" /> <PlotView x:Name="plotview1" Model="{Binding Model1}" IsVisible="True" HeightRequest="300" /> <PlotView x:Name="plotview2" Model="{Binding Model2}" IsVisible="True" HeightRequest="300" /> <PlotView x:Name="plotview3" Model="{Binding Model3}" IsVisible="True" HeightRequest="300" /> <PlotView x:Name="plotview4" Model="{Binding Model4}" IsVisible="True" HeightRequest="300" /> </StackLayout> </ScrollView> </ContentPage.Content> </ContentPage> 选项装载到容器中的任何东西都不是“根文件系统的一部分”,并且可以具有自己的访问模式。如果您只需要在容器中保留一些临时空间,则可以使用docker run --tmpfs选项在某个位置挂载一个空的内存文件系统。

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会将其视为有价值的用户数据,并拒绝对其进行更新。因此,为此选择一个$ 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 以外的目录(子目录/app可以正常工作,只要可以开始为空即可)。