Dockerizing spring boot application, использующий плагин JIB
Я использую плагин maven jib, чтобы докернизировать мое приложение, основанное на загрузке Spring.
https://github.com/GoogleContainerTools/jib/tree/master/jib-maven-plugin
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<executions>
<execution>
<phase>generate-sources</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<resources>
<resource>
<directory>src/main/resources/static</directory>
</resource>
</resources>
<outputDirectory>${project.build.directory}/webapp/static</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>com.google.cloud.tools</groupId>
<artifactId>jib-maven-plugin</artifactId>
<version>0.9.13</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>build</goal>
</goals>
</execution>
</executions>
<configuration>
<from>
<image>${base.image}</image>
</from>
<to>
<image>${registry}/${repository}/${image}:${version}</image>
</to>
<extraDirectory>${project.build.directory}/webapp</extraDirectory>
</configuration>
</plugin>
У меня нет аргументов или Entrypoint в плагине JIB. Я хотел бы контролировать это через аргумент.
Во время работы "mvn clean install" я вижу строку в журналах ниже.
Container entrypoint set to [java, -cp, /app/resources:/app/classes:/app/libs/*, com.test.Application]
Я попытался передать --spring.config.location в качестве аргументов программы, как показано ниже. Но это не комплектация моего приложения. Свойства. Я попытался изменить имя начального класса, чтобы проверить, работает ли он, но он все еще принимает com.test.Application. Похоже, здесь не учитывается -c.
Окно запуска -v /local/path/config/:/secrets/ IMAGE:1.0 bash "java -cp /app/libs/*:/app/resources/:/app/classes/ -Xmx2g -Xms2g com.test.Application --spring.config.location=/ секреты /application.yml"
2 ответа
Понимает проблему при использовании jib в качестве плагина maven.
затем entryPoint будет передан внутри контейнера, но, похоже, плагин jib этого не уловил.
поэтому ниже необходимо внести изменения для доступа к аргументу для местоположения:
<plugin>
<groupId>com.google.cloud.tools</groupId>
<artifactId>jib-maven-plugin</artifactId>
<version>2.2.0</version>
<configuration>
<to>
<image>image-url</image>
</to>
<container>
<creationTime>${maven.build.timestamp}</creationTime>
<mainClass>com.package.SpringBootMainClass</mainClass>
<args>
<arg>--spring.config.location=/demo/location/application.yml</arg>
</args>
</container>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>build</goal>
</goals>
</execution>
</executions>
</plugin>
Поскольку вы используете Jib для создания образа контейнера, точкой входа по умолчанию будет
ENTRYPOINT ["java", jib.container.jvmFlags, "-cp", "/app/resources:/app/classes:/app/libs/*", jib.container.mainClass]
Также jib использует образ без дистрибутива, который содержит только зависимости времени выполнения. Значит, ты не можешь бежатьbash
в вашем контейнере.
Это должно сработать.
docker run -e "spring.config.location=/secrets/application.yml" -v /local/path/config/:/secrets/ IMAGE:1.0