Docker:禁用特定阶段的caching

我有一个多阶段的Dockerfile。 在第一阶段,我git clone从github回购git clone 。 在后期阶段,我会做其他的东西,比如pip等,并使用第一阶段的文件。我只想禁用第一阶段的caching。

它看起来像docker build --target stage1 --no-cache不做我想要的。

有没有办法只禁用某个阶段?

我的Dockerfile看起来像这样:

 FROM yijian/git-alpine WORKDIR /tmp RUN git clone https://github.com/abc/abc.git FROM python:3.5.3-slim RUN mkdir /app ADD requirements.txt /app ADD pip/pip.conf /root/.pip/pip.conf WORKDIR /app RUN pip3 install --upgrade pip && \ pip3 install pbr && \ pip3 install -r requirements.txt ADD server.py /app ADD docker/start.sh /app RUN chmod a+x /app/start.sh COPY --from=0 /tmp/abc/directory /usr/local/lib/python3.5/site-packages/abc/directory EXPOSE 9092 ENTRYPOINT ["./start.sh"] 

我不相信一个Dockerfile可以caching特定状态的caching。 这可能会产生一个很好的function请求,但我宁愿将它看作文件中的声明性语句而不是命令行。

根据Docker的参考网站: https : //docs.docker.com/engine/reference/commandline/build/#usage

“–target”标志允许你从一个Dockerfile中select一个目标阶段,这意味着它将只运行Dockerfile的那一部分。 我希望–no-cache标志可以和这个标志一起工作,但是我不希望Dockerfile的其他部分运行。

我相信你想要发生的事情将需要多个命令,可能会失败的多级Dockerfile的目的。

这将需要更多的工作,但取决于你想要caching什么,你可以包括一个脚本,如bash或PowerShell,可以实现这个目标。

另一个select(取决于你的需要)可能是使用一个单独的Docker容器,它caching你所需要的。 例如,我创build了一个CI构build,它使用一个只导入依赖关系的Dockerfile,然后我的主构build发生在引用第一个容器的容器中。 我已经用“dotnet restore”命令完成了这个工作,所以依赖关系被预先加载,并且使用“npm install”来完成。 这种方法可以与任何包pipe理工具一起使用,它允许你指定一个源文件。 所以你有一个project.json,你可以提取常见的依赖关系,并将其称为cache.package.json,然后构build一个已经为您做了大量下载的基础映像,然后理想情况下,当您更频繁地运行build立它需要拉less。 利用Docker提供的分层方法!