我有一个 Spring Boot 项目,并尝试在 Circleci 持续集成服务器上使用 Docker 文件构建该项目。
问题是我的 github 存储库中只有源代码;没有目标目录或 jar 文件。我的 Dockerfile 无法获取最终 Artifact (将应用程序打包到 jar 中)。
请检查 Docker 文件并提出前进的建议。
FROM java:8
EXPOSE 8090
VOLUME /tmp
ADD target/spring-boot-rest-0.3.0.jar app.jar
RUN bash -c 'touch /app.jar'
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-Dspring.profiles.active=container","-jar","/app.jar"]
最佳答案
您需要以某种方式打包一个 jar 来构建您的 docker 镜像。
您可以在 dockerfile 中安装 maven,并在构建容器时构建项目。这相当于自动化其他答案中描述的步骤。
下面的示例假设您的 java 源位于/code 目录中,并且您的 Maven 包目标生成一个名为 target/spring-boot-rest-0.3.0.jar 的 jar:
FROM java:8
EXPOSE 8090
VOLUME /tmp
WORKDIR /code
RUN apt-get update
RUN apt-get install -y maven
ADD pom.xml /code/pom.xml
RUN ["mvn", "dependency:resolve"]
RUN ["mvn", "verify"]
# Adding source, compile and package into a fat jar
ADD src /code/src
RUN ["mvn", "package"]
ADD target/spring-boot-rest-0.3.0.jar app.jar
RUN bash -c 'touch /app.jar'
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-Dspring.profiles.active=container","-jar","/app.jar"]
但是,这似乎并不是大多数 Java 人员的做法(尽管这是容器化节点或 Python 应用程序的方式)。
人们似乎用 maven 构建 docker 镜像。 circl.ci 支持 maven 构建,所以这可能就是你应该做的。这是我使用的插件。有一堆:
https://github.com/spotify/docker-maven-plugin/blob/master/README.md
配置好 pom.xml 文件后,您将指示 Circl.ci 使用如下命令创建 docker 文件:
mvn clean package docker:build
无论您使用哪个插件,该过程都会相似。
关于java - Docker::Dockerfile 问题 - 目标文件夹不可用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37667002/