Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有没有办法防止在docker映像中覆盖文件?_Docker_Dockerfile - Fatal编程技术网

有没有办法防止在docker映像中覆盖文件?

有没有办法防止在docker映像中覆盖文件?,docker,dockerfile,Docker,Dockerfile,我有一个基本的Docker映像,上面有一个服务器,它将构建在上面来承载特定的应用程序。有没有办法防止某些文件在下游图像中被覆盖 例如,假设我有一个ApacheTomcat映像,我不希望其他拥有应用程序的人通过在Dockerfile中运行ADD myapp/web.xml$CATALINA_HOME/conf来覆盖web.xml文件 这是不可能的。(一个典型的Docker文件以root用户的身份完成大部分工作,如果它不这样做,如果它真的想覆盖该文件,它可以轻松地用户root)。对于您描述的情况来说

我有一个基本的Docker映像,上面有一个服务器,它将构建在上面来承载特定的应用程序。有没有办法防止某些文件在下游图像中被覆盖

例如,假设我有一个ApacheTomcat映像,我不希望其他拥有应用程序的人通过在Dockerfile中运行
ADD myapp/web.xml$CATALINA_HOME/conf
来覆盖
web.xml
文件

这是不可能的。(一个典型的Docker文件以root用户的身份完成大部分工作,如果它不这样做,如果它真的想覆盖该文件,它可以轻松地
用户root
)。对于您描述的情况来说,这似乎也没什么大不了的,因为Docker图像通常是单一用途的,如果在Tomcat映像上运行的某个特定应用程序真的想重新配置应用程序服务器,Docker的隔离意味着它不会影响其他任何东西


如果你真的想,你可以把文件的副本放在一个安全的地方,然后在entrypoint脚本中把它复制回来,但是如果我是一个下游开发人员,遇到这种行为,我可能会有点沮丧(这肯定违反了最不意外的原则)。

最终,无论谁基于你的图像,具有完全控制权,可以覆盖他们想要的任何配置或文件。Docker并不是为了防止它

也就是说,如果您只是想防止意外覆盖,就有可能解决这个问题

我会将ENTRYPOINT链接为您自己的脚本,然后启动您的服务器。但在此之前,它会验证一组组件的完整性,例如server.xml端口和连接器、web.xml等。它可以像生成验证签名并提交给集群验证器一样复杂。例如,如果您在Kubernetes中运行,则可能会有一个编排器列出并验证所有正在运行的容器,它可以验证这些签名,并停止所有不符合要求标准的内容


也就是说,您的问题应该提升到一个运行时环境,您有一个任务要保护该环境,而不是映像级别,在映像级别,您应该允许尽可能多的灵活性,以支持未来的开发

是的,我知道这是一个有点奇怪的用例,但想法是鼓励尽可能少的更改以限制调试(不是我的想法,但我知道它来自哪里)。我还认为它在运行在Tomcat之类的应用程序中特别无用,因为您可以在WEB-INF之类的应用程序中指定特定于应用程序的配置。不过,感谢您更清楚地理解了它的可行性。