java - Docker::Dockerfile 问题 - 目标文件夹不可用

标签 java maven docker spring-boot circleci

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

相关文章:

eclipse - 无法将 Google Cloud 应用程序代码编译为 java 1.7 - 版本始终为 1.8

java - Spark (Java) 到 Elasticsearch

docker - 在两个容器之间共享/tmp

命令行中的 Java 执行因 JMX 错误而失败

Java Swing JTextField setInputVerifier 保持关注 TextField

java - Jackson @JsonFormat 用不正确的时区转换日期

java - 从项目中删除 Nexus 依赖项

Java LayeredPane LayoutManager add()方法冲突

java - 从另一个 Maven 存储库 Artifact 中获取所有 hibernate 注释/实体

docker - 使用环境变量从另一个Docker容器访问本地SQS服务