在Docker构build过程中传递configuration文件的最佳方式

我的应用程序需要运行许可证文件。 我不想在将要分发的Docker映像中包含这个。 我希望用户应该能够提供他们的许可证文件,通过在Docker运行期间将其作为卷挂载。 我所追求的是在构build阶段暂时向Docker提供许可证文件的一种方式。 在这个阶段,我无法装入卷。 有没有一个标准的模式来执行这种事情? 简而言之,我需要在构build期间提供一个相关的临时文件,以便构build完成,但该文件不包含在最终映像中。

菲尔,感谢所有的感谢

在您的Dockerfile的构build步骤中,您将不得不复制临时文件,然后将其删除。 这是在同一个RUN命令,这是很重要的,否则临时文件可能会最终在一个caching联合FS …这可能是违反许可,如果这就是瞬态文件是什么。

像这样的东西:

 RUN curl url/to/transient_file -o /containter/path/to/transient_file \ && your_build_steps \ && rm -f /container/path/to/transient_file 

你想要的是一个在构build时不包含许可证文件的图像。 每次容器启动时都需要添加它。

我可以想到这样做的几种方法,最明显的是在启动时查找包含许可证文件的固定名称的挂载卷,如果没有find退出消息。

这个Dockerfile说明了这个想法

 FROM ubuntu:14.04 RUN echo "#!/bin/bash" >> /bin/startup.sh RUN echo "if [ ! -e /license/license.txt ] " >> /bin/startup.sh RUN echo "then " >> /bin/startup.sh RUN echo " echo 'missing license'" >> /bin/startup.sh RUN echo "exit 1 " >> /bin/startup.sh RUN echo "fi " >> /bin/startup.sh RUN echo "top " >> /bin/startup.sh RUN chmod +x /bin/startup.sh ENTRYPOINT ["/bin/startup.sh"] 

没有授权经理的情况下运行它将导致它无法启动。 用许可证运行将永远运行。

 > docker run -it test missing license > docker run -v `pwd`/license:/license -it test [works] 

你可以在一个环境variables文件中指定它