当前位置: 首页 > 知识库问答 >
问题:

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

诸腾
2023-03-14

我假设语法与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:无法启动容器[sha1]:添加“target/artifact-1.0.0-snapshot-exec.jar app.jar”的功能未知

在使用fabric8 docker maven插件时,DockerFile的“add”语义的正确用法是什么?

  <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>

共有1个答案

卞俊贤
2023-03-14

capadd不能用于向Docker图像添加文件。它旨在为启动容器设置特定的Linux功能。它与--cap-addcli选项相同。

对于在生成映像时添加文件,您有以下几种可能:

  • 您可以使用与maven-assembly-plugin非常相似的程序集。还有预定义的描述符,例如,包括您的构建人工制品。
  • 您可以引用外部Dockerfile(您可以在其中放置常规Dockerfileadd命令。这可以通过在配置中设置 ... 来触发(在下一个版本中,您可以将 ... )也放在( ... )的正下方。

因此,对于您的示例(假设您的工件是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

 类似资料:
  • 我对Maven相当陌生,试图编译一个非常简单的项目。这是我的pom。xml文件: 当我执行时,我得到一堆错误。显然,依赖项没有下载和使用。这是错误日志: 如果我遗漏了什么,有人能指出我吗? 谢谢。

  • 我刚刚用inline语句更改了Google cloud函数源代码中的两行代码,这两行代码涉及使用datetime库解析日期字符串,没有任何其他更新。同样的部署已经运行了一年多。 突然,我犯了两个错误- 错误1- (gcloud.functions.deploy)操作错误:code=3,消息=构建失败:{"错误":{"canonicalCode":"INTERNAL","errorMessage":

  • 我需要某人的帮助。 我遵循教程使用Kafka Connect和Debezium将数据从MySQL流式传输到Kafka,但是使用Debezium MySQL连接器将MySQL连接到Kafka服务器时遇到了麻烦。 这是我的设置和其他信息。 操作系统:视窗10。 Kafka连接:合流5.0。 MySQL连接器:0.8.1最终版本。 我保存文件 我添加插件路径 当我尝试连接Kafka Connect时,它

  • 我正在尝试使用内联编辑器重新部署一个以前工作的Python云函数。不改变来源或要求。txt,部署失败,错误消息如下: 功能日志提供以下详细信息: 这种情况从上周五开始,一直持续到今天。我还尝试了使用gcloud函数进行本地部署,在部署时我收到了类似的错误消息:

  • 我正试图从Google Cloud控制台创建一个新的Google Cloud函数,但函数启动失败,出现超时错误。我已经有3个正在运行的云功能。 当我试图从Google Cloud shell创建相同的功能时, 该消息再次失败 错误:(gcloud.functions.deploy)未能将函数源代码上载到签名的url:https://storage.googleapis.com/gcf-upload

  • 我目前正忙于一个Codenameone应用程序,它要求我通过按钮点击添加项目列表,就像如何在任务列表中添加任务一样。我该怎么做?我对这个有点陌生。请帮忙。