2016-04-26 2 views
0

Контекст: пытается настроить автоматическую тестовую систему интеграции, где maven может запускать и останавливать изображения докеров до и после тестов, запускаемых на сервере CI. Решил пойти с fabric8 из-за обширной документации.fabric8 docker-maven-plugin capAdd не работает с «неизвестной возможностью для добавления»

fabric8io.github.io/docker-maven-plugin/docker-start.html говорит

capAdd список добавить элементы для задания параметров ядра, чтобы добавить в контейнер.

Я предполагаю, что синтаксис похож на ADD местного артефактом-version.jar app.jar , но это не работает.

Проблема: когда я бегу МВН чистый пакет докер: построить докер: старт -Ddocker.follow = истинный я получаю сообщение об ошибке 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"

Что правильное использование Dockerfile в «ADD» семантическое когда с помощью плагина mock для док-станции?

ПОМ:

<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

capAdd не может быть использована для добавления файлов в Докер изображения. Он предназначен для установки конкретных возможностей Linux для запуска контейнеров. Это то же самое, что и --cap-add cli option.

Для добавления файлов при построении изображений, у вас есть несколько возможностей, как описаны в документации:

  • Вы можете использовать assembly, который работает так же, как Maven-сборка-плагин. Существуют также предопределенные дескрипторы, например. включая ваш артефакт сборки.
  • Вы можете обратиться к внешнему Dockerfile (где вы можете поместить регулярные Dockerfile ADD команды. Это может быть вызвано установкой <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> 

Смотрите документацию descriptor format для деталей

Если вы не использовали классификатор exec, все было бы намного проще, потому что тогда вы могли бы использовать предопределенный дескриптор artifact.

+0

Благодарим за подробное объяснение. Я путал capAdd и Add. Я должен был использовать для этого сборку. Еще раз спасибо. –