OpenShift 3.1 – 防止Dockercachingcurl资源

我在我的Dockerfile中有这个curl命令:

RUN curl -H 'Cache-Control: no-cache' -f ${NEXUS_URL}${ARTIFACT_PATH}-${ARTIFACT_VERSION}.war?nocache=true -o $JBOSS_HOME/standalone/deployments/ROOT.war 

我第一次运行它,我可以看到下载信息。 但是之后,似乎是caching远程资源,因此,不再更新:

 Step 6 : RUN curl -H 'Cache-Control: no-cache' -f ${NEXUS_URL}${ARTIFACT_PATH}-${ARTIFACT_VERSION}.war?nocache=true -o $JBOSS_HOME/standalone/deployments/ROOT.war 30 ---> Using cache 31 ---> be50412bf6c3 

我怎么能阻止呢?

根据OpenShift文档( https://docs.openshift.com/enterprise/3.1/dev_guide/builds.html#no-cache ),您可以使用以下语法强制构build不被caching:

 strategy: type: "Docker" dockerStrategy: noCache: true 

这将意味着没有步骤被caching,这将使您的构build更慢,但意味着您的构build中有正确的构件版本。

您可以使用ARG在特定的Dockerfile指令中cachingcaching。

在Dockerfile中:

 ARG CACHEBUST=1 RUN git clone https://github.com/octocat/Hello-World.git 

在命令行上:

 docker build -t your-image --build-arg CACHEBUST=$(date +%s) . 

将CACHEBUST设置为当前时间意味着它将始终是唯一的,并且在Dockerfile中的ARG声明之后的指令将不会被caching。 请注意,您也可以在不指定CACHEBUST构build参数的情况下构build,这将导致它使用默认值1并保留caching。 这可以用来总是检查新的副本的git回购,拉最新的SNAPSHOT依赖项等

资源

也:

您可以使用–no-cache或–build-arg来使caching失效。 通过使用包含所有可caching命令的基本映像,可以最大限度地减less–no-cache的影响。

资源

我无法控制docker运行的方式,我的意思是我运行在PaaS中调用我的docker文件,所以我不能在docker构build中传递参数

你可以试着控制你的Dockerfile的内容。

如果您可以在让PaaS调用它之前重新生成Dockerfile,这将有助于确保caching失效:

 sed -i 's/ROOT.war.*/ROOT.war && echo $(date)'/g' Dockerfile