我想根据this answer将根文件系统设置为只读:
docker run --read-only ... myapp
但是,我还需要允许容器中运行的应用程序访问其文件夹/app
。该应用程序需要一些临时存储,但是为了安全起见,我需要限制它对所有内容的访问。
答案 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
可以正常工作,只要可以开始为空即可)。