我有一个java / hibernate / jpa / maven项目,我试图转换,以便它(从项目创建的.jar文件)是Docker Image的一部分。我也在使用Spotify插件。
下面,对于以下Docker命令
ADD <full_path_of_generated_file>.jar app.jar
值 full_path_of_generated_file 是从pom.xml文件生成的(在Maven端)。为了让Docker正确生成图像,需要此信息。
如何将生成的文件的名称传递给Dockerfile?
TIA
Maven pom.xml文件的插件区域
<plugins>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<configuration>
<imageName>apx/${project.artifactId}</imageName>
<dockerDirectory>${project.basedir}/docker</dockerDirectory>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<!-- <version>2.6</version> -->
<executions>
<execution>
<id>analyze</id>
<phase>package</phase>
<configuration>
<failBuild>true</failBuild>
<ignoreDirect>false</ignoreDirect>
</configuration>
</execution>
</executions>
<configuration>
<finalName>${project.artifactId}</finalName>
<archive>
<manifest>
<mainClass>ccinfw.MainApplication</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
[... snip ...]
<artifactId>ccinf</artifactId>
以下是正在使用的Dockerfile的副本
FROM java:8
VOLUME /tmp
ADD <full_path_of_generated_file>.jar app.jar
RUN bash -c 'touch /app.jar'
EXPOSE 8080
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
答案 0 :(得分:1)
内部pom.xml
COR_PRF_USE_PROFILE_IMAGES
确保将Dockerfile放置在pom中提到的位置,以便它可以动态替换引用来构建和复制Dockerfile。
内部Dockerfile
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<executions>
<execution>
<id>copy-resources</id>
<phase>validate</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>${basedir}/target/</outputDirectory>
<resources>
<resource>
<directory>src/main/docker</directory>
<filtering>true</filtering>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
答案 1 :(得分:0)
对我来说有用的是将最终工件的名称(例如something_or_other-1.2.3-SNAPSHOT.jar)作为参数(ARG)传递到Dockerfile中。
在pom.xml中:
<plugin>
...
<configuration>
...
<buildArgs>
<JAR_FILE>${project.build.finalName}.jar</JAR_FILE>
</buildArgs>
</configuration>
</plugin>
然后,在Dockerfile里面
# insert other Dockerfile stuff here and then...
ARG JAR_FILE
ADD target/${JAR_FILE} app.jar
ENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom", "-jar", "/app.jar"]