有没有办法防止覆盖docker镜像中的文件



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

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

这是不可能的。(一个典型的Dockerfile以root用户的身份完成大部分工作,如果它不这样做,如果它真的想覆盖该文件,它可以微不足道地USER root,Docker的隔离意味着它不会影响其他任何事情。

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

最终,无论谁的图像基于您的图像,都可以完全控制覆盖他们想要的任何配置或文件。Docker并不是为了防止这种情况而构建的。

也就是说,如果你只是想防止意外的重写,就有可能解决这个问题。

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

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

最新更新