我有一个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/