fabric8 docker-maven-plugin capAdd失败,出现“未知能力添加”

上下文 :尝试设置一个自动化集成testing套件,maven可以在CI服务器上运行testing之前和之后启动和停止docker映像。 由于广泛的文件,决定与fabric8结盟。

fabric8io.github.io/docker-maven-plugin/docker-start.html说

cap添加一个添加元素列表来指定要添加到容器的内核参数。

我假设语法与ADD local-artifact-version.jar app.jar类似,但是这不起作用。

问题 :当我运行mvn clean package docker时:build docker:start -Ddocker.follow = true我得到一个错误io.fabric8.maven.docker.access.hc.http.HttpRequestException: Cannot start container [sha1]: Unknown capability to add "target/artifact-1.0.0-SNAPSHOT-exec.jar app.jar"

当使用fabric8 docker maven插件时Dockerfile的“ADD”语义的正确用法是什么?

pom

  <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> <plugin> <groupId>io.fabric8</groupId> <artifactId>docker-maven-plugin</artifactId> <configuration> <image> <name>postgres:9.4</name> <alias>dbstore</alias> <run> <namingStrategy>alias</namingStrategy> <volumes> <bind>/var/lib/postgresql/data</bind> </volumes> </run> </image> <image> <name>private-dockerhub.company.com/dbpath/postgres:latest</name> <alias>data_dump_loader</alias> <run> <namingStrategy>alias</namingStrategy> <ports> <port>5432:5432</port> </ports> <volumes> <from>dbstore</from> </volumes> </run> </image> <image> <name>private-dockerhub.commpany.com/path/reports</name> <alias>reports</alias> <build> <from>private-dockerhub.company.com/core/java:oracle-server-jre8</from> <tags> <tag>${project.version}</tag> </tags> <entryPoint> <arg>java</arg> <arg>-Djava.security.egd=file:/dev/./urandom</arg> <arg>-jar</arg> <arg>/app.jar</arg> </entryPoint> </build> <run> <namingStrategy>alias</namingStrategy> <capAdd> <capAdd>target/reports-1.0.0-SNAPSHOT-exec.jar app.jar</capAdd> </capAdd> <ports> <port>${project.port}:${project.port}</port> </ports> <wait> <!-- The plugin waits until this URL is reachable via HTTP ... --> <http> <url>http://localdocker:${project.port}/beans</url> <method>GET</method> <status>403</status> </http> <!-- ... but at max 10 seconds --> <time>120000</time> </wait> <log> <enabled>true</enabled> <color>red</color> </log> <env> <SPRING_DATASOURCE_URL>jdbc:postgresql://localdocker:5432/thedatabase</SPRING_DATASOURCE_URL> <SPRING_DATASOURCE_DRIVER-CLASS-NAME>org.postgresql.Driver</SPRING_DATASOURCE_DRIVER-CLASS-NAME> <SPRING_DATASOURCE_USERNAME>cool-username</SPRING_DATASOURCE_USERNAME> <SPRING_DATASOURCE_PASSWORD>secret</SPRING_DATASOURCE_PASSWORD> </env> <extraHosts>localdocker:ip.168.99.100</extraHosts> </run> </image> </configuration> </plugin> </plugins> 

capAdd不能用于添加文件到Docker镜像。 它旨在设置启动容器的特定Linuxfunction。 它与--cap-add cli选项相同 。

要在构build图像时添加文件,您可以使用文档中描述的几种可能性:

  • 你可以使用一个类似maven-assembly-plugin的程序集。 还有预定义的描述符,例如包括你的构build人工制品。
  • 你可以参考一个外部的Dockerfile(你可以在其中放置常规的Dockerfile ADD命令,这可以通过在configuration文件中设置<build><assembly><dockerFileDir>....来触发(在下一个版本中, <dockerFileDir>也直接在下面( <build>...</build> )。

所以对于你的例子(假设你的工件是reports-1.0.0-SNAPSHOT-exec.jar ),你可以尝试:

 <build> <from>private-dockerhub.company.com/core/java:oracle-server-jre8</from> <tags> <tag>${project.version}</tag> </tags> <entryPoint> <arg>java</arg> <arg>-Djava.security.egd=file:/dev/./urandom</arg> <arg>-jar</arg> <arg>/app.jar</arg> </entryPoint> <!-- ============================================ --> <assembly> <inline> <dependencySets> <dependencySet> <includes> <include>${project.groupId}:${project.artifactId}:jar:${project.version}:exec</include> </includes> <outputFileNameMapping>app.jar</outputFileNameMapping> </dependencySet> </dependencySets> </inline> </assembly> </build> 

有关详细信息,请参阅描述符格式的文档。

如果不使用分类器exec ,事情会更容易,因为那样你可以使用预定义的描述符artifact