【问题标题】:Mounting Volume as part of a multi-stage build安装卷作为多阶段构建的一部分
【发布时间】:2018-07-05 15:11:33
【问题描述】:

如何装载一个卷来存储我的 .m2 存储库,这样我就不必在每次构建时都下载互联网?

我的构建是多阶段构建:

FROM maven:3.5-jdk-8 as BUILD

COPY . /usr/src/app
RUN mvn --batch-mode -f /usr/src/app/pom.xml clean package

FROM openjdk:8-jdk
COPY --from=BUILD /usr/src/app/target /opt/target
WORKDIR /opt/target

CMD ["/bin/bash", "-c", "find -type f -name '*.jar' | xargs java -jar"]

【问题讨论】:

  • 您不能在构建过程中安装卷。构建旨在独立于您的主机。
  • 您无法在构建期间访问卷数据。见stackoverflow.com/questions/51627401/…
  • @larsks 有些事情可能会从不独立中受益(包缓存,否则您必须为每个构建拉取 Internet,并且给定版本不会更改)。
  • 我希望我能仅仅因为“下载互联网”就给你的问题一个赏金。这正是我的感受! ??????

标签: docker docker-compose


【解决方案1】:

您可以使用 Docker >18.09 和 BuildKit 做到这一点。您需要启用 BuildKit:

export DOCKER_BUILDKIT=1

然后您需要启用实验性 dockerfile 前端功能,方法是在第一行添加 do Dockerfile:

# syntax=docker/dockerfile:experimental

之后您可以调用 RUN 命令with cache mount。缓存挂载在构建期间保持持久:

RUN --mount=type=cache,target=/root/.m2 \
    mvn --batch-mode -f /usr/src/app/pom.xml clean package

【讨论】:

  • 这是否将 .m2 从主机安装到 docker 构建环境中?当我尝试运行容器,执行并查看容器内的“目标”路径中的内容时,我没有看到与主机相同的内容。它是空的,因此我的“mvn -o install”不起作用..
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多