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

时间:2016-06-06 21:15:28

标签: java maven docker spring-boot circleci

我有一个spring boot项目,并试图在circleci持续集成服务器上使用Docker文件构建项目。

问题是我的github repo中只有我的源代码;没有目标目录或jar文件。我的Dockerfile无法获得最终的工件(将应用程序打包到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"]

2 个答案:

答案 0 :(得分:1)

构建应用程序

首先,您需要使用Maven,Gradle等构建应用程序。这将在目标目录中生成一个Jar文件。

示例:

mvn clean package

构建Docker镜像

接下来,您将构建Docker镜像,该镜像将使用上一步中生成的Jar文件。确保您在Jar文件中指定的路径与Dockerfile的位置相关( 这很重要!

示例:

docker build -t example-company/example-image .

如果您仍然遇到问题,请分享任何错误日志或GitHub回购链接。

答案 1 :(得分:1)

你需要以某种方式打包一个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

该过程将与您使用的任何插件类似。