有没有办法防止覆盖Docker映像中的文件?

时间:2018-11-30 16:37:08

标签: docker dockerfile

我有一个带有服务器的基础Docker映像,然后将在该映像的基础上构建以托管特定的应用程序。有没有一种方法可以防止某些文件在下游映像中被覆盖。

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

2 个答案:

答案 0 :(得分:2)

这是不可能的。 (典型的Dockerfile以root用户身份执行其大部分工作,如果不这样做,则如果它真的想覆盖该文件,可以轻而易举USER root。)这似乎也没什么大不了的您所描述的情况是因为Docker映像通常是单一用途的,并且如果在Tomcat映像之上运行的某些特定应用确实要重新配置应用服务器,则Docker的隔离意味着它不会影响其他任何东西。

如果您真的想,可以将文件的副本放在安全的地方,然后在入口点脚本中将其复制回去,但是如果我是下游开发人员,并且遇到了这种情况我可能会感到有点沮丧(这肯定违反了最少惊讶的原则)。

答案 1 :(得分:1)

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

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

我将ENTRYPOINT链接为您自己的脚本,该脚本反过来启动您的服务器。但在此之前,它会验证一堆组件的完整性,例如server.xml端口和连接器,web.xml等。它可以像生成验证签名并将其提交给集群验证程序一样复杂。例如。如果您在Kubernetes中运行,则可以有一个协调器来列出并验证所有正在运行的容器,并且可以验证此类签名并阻止所有不符合要求的标准。

即您的问题应该引起运行时环境的注意,而不是图像级别,在运行时环境中,您需要确保任务的安全,在该环境中,您应该尽可能地提高灵活性,以支持将来的开发。