0

コンテキスト: CI サーバーでテストを実行する前後に、maven が docker イメージを開始および停止できる自動統合テストスイートをセットアップしようとしています。ドキュメントが充実しているため、fabric8 を使用することにしました。

fabric8io.github.io/docker-maven-plugin/docker-start.html は言う

capAdd 追加要素のリストを追加して、コンテナーに追加するカーネル パラメーターを指定します。

構文は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」セマンティックの正しい使い方は何ですか?

ポンポン

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

1 に答える 1

1

capAddDocker イメージへのファイルの追加には使用できません。コンテナーを開始するための特定の Linux 機能を設定するためのものです。--cap-addcli オプションと同じです。

イメージをビルドするときにファイルを追加するには、ドキュメントで説明されているように、いくつかの可能性があります

  • maven-assembly-plugin と同じように機能するアセンブリを使用できます。たとえば、ビルド アーティファクトを含めるための事前定義された記述子もあります。
  • 外部の Dockerfile (通常の DockerfileADDコマンドを配置できる場所) を参照できます。これは<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>

詳細については、記述子形式のドキュメントを参照してください。

ただし、 classifierexecを使用しない場合は、事前定義された descriptor を使用できるため、作業ははるかに簡単になりますartifact

于 2016-04-27T08:36:48.623 に答える