OpenShift 3.1 - 防止Docker缓存curl资源

cod*_*ent 5 curl openshift docker openshift-origin dockerfile

我在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
Run Code Online (Sandbox Code Playgroud)

我第一次运行它时可以看到下载信息.然而,之后它似乎缓存远程资源,因此,不再更新它:

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
Run Code Online (Sandbox Code Playgroud)

我怎么能阻止这个?

joe*_*lnb 7

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

strategy:
  type: "Docker"
  dockerStrategy:
    noCache: true
Run Code Online (Sandbox Code Playgroud)

这意味着不会缓存任何步骤,这会使您的构建更慢,但意味着您在构建中拥有正确的工件版本.


Sta*_*rov 5

您可以使用ARG在特定的Dockerfile指令中破坏缓存.

在Dockerfile中:

ARG CACHEBUST=1
RUN git clone https://github.com/octocat/Hello-World.git 
Run Code Online (Sandbox Code Playgroud)

在命令行上:

docker build -t your-image --build-arg CACHEBUST=$(date +%s) . 
Run Code Online (Sandbox Code Playgroud)

将CACHEBUST设置为当前时间意味着它将始终是唯一的,并且不会缓存Dockerfile中ARG声明之后的指令.请注意,您也可以在不指定CACHEBUST build-arg的情况下进行构建,这将使其使用默认值1并保留缓存.这可以用来总是检查git repos的新副本,拉出最新的SNAPSHOT依赖项等.

资源

也:

您可以使用--no-cache或--build-arg使缓存无效.您可以通过使用包含所有可缓存命令的基本映像来最小化--no-cache的影响.

资源