docker - 如何在Docker中的另一个自定义镜像中使用自定义镜像

标签 docker sbt

我有一个sbt项目,可以说DemoProject它依赖于另一个sbt项目commonsProject DemoProject使用了一个jars commonsProject,因为我为commonsProject创建了两个自定义图像,第二个为DemoProject创建了
这是commonsProject的DockerFile

FROM hseeberger/scala-sbt:11.0.2_2.12.8_1.2.8

MAINTAINER name <name@gmail.com>

ADD . /project-commons

WORKDIR /project-commons

# Define default command.
CMD ["sbt", "publishLocal"]

我用docker build project-commons:v1 .构建图像

这是DemoProject的Dockerfile
FROM project-commons:v1 

MAINTAINER name <name@gmail.com>

WORKDIR /project-commons

ADD  . /home/user/.ivy2/local/project-commons_2.12/0.1.0-SNAPSHOT/jars/project-commons_2.12.jar
# Define default command.
CMD ["sbt","publishLocal"]

FROM hseeberger/scala-sbt:11.0.2_2.12.8_1.2.8

MAINTAINER name <name@gmail.com>

WORKDIR /project-demo

ADD . /project-demo

# Define default command.
CMD ["sbt", "run"]

并构建它docker build project-demo:v1并运行它
docker run project-demo

但是在日志中,我得到了project-commons.jar的未解决依赖项的异常(exception),它说找不到jar
我在这里想念什么?我是Docker的初学者,请指导我

最佳答案

您正在尝试做multi-stage build。在秒级(从第二个FROM开始)中,您必须指定要从上一阶段添加的文件:

FROM project-commons:v1 as firstStage

MAINTAINER name <name@gmail.com>

WORKDIR /project-commons

ADD  . /home/user/.ivy2/local/project-commons_2.12/0.1.0-SNAPSHOT/jars/project-commons_2.12.jar
# Define default command.
CMD ["sbt","publishLocal"]

FROM hseeberger/scala-sbt:11.0.2_2.12.8_1.2.8

MAINTAINER name <name@gmail.com>

# Copy from previous stage
COPY --from=firstStage /projectCommons /projectCommons
COPY --from=firstStage /home/user/.ivy2/ /home/user/.ivy2/

WORKDIR /project-demo

ADD . /project-demo

# Define default command.
CMD ["sbt", "run"]

但是,为什么不正常构建呢? (由于某种原因,您正在复制镜像中的当前构建目录两次,因此ADD之一可能是多余的)
FROM project-commons:v1

MAINTAINER name <name@gmail.com>

ADD  . /home/user/.ivy2/local/project-commons_2.12/0.1.0-SNAPSHOT/jars/project-commons_2.12.jar

WORKDIR /project-demo

ADD . /project-demo

# Define default command.
CMD ["sbt", "run"]

关于docker - 如何在Docker中的另一个自定义镜像中使用自定义镜像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55970391/

相关文章:

linux - 分层文件系统和卷挂载

azure - 使用 sbt : Unable to find credentials for 将 scala 项目发布到 azure feed

用于在 bintray 中发布的 Sbt

docker - 在docker的工具箱版本中,有没有办法为容器分配内存?

java - 使用远程调试运行 docker-compose。 Intellij,Java 11

尽管 docker-compose.yml 中有不同的 container_name,docker-compose 仍会重新创建正在运行的容器

java - Ignite 在 Docker 中运行(为 : General Java-Docker issue)

windows - 在 Windows 上,我在哪里放置 SBT 0.13.13 的全局插件?

scala - 带有 IntelliJ 和 SBT 的自定义文件夹结构的 Uber jar

scala - 如何从下载 Spark 页面的源代码构建 Spark?