Проблема с использованием плагина jib maven в автономном режиме для сборки контейнера docker - PullRequest
1 голос
/ 13 апреля 2020

Я следую Spring Boot Docker Tutorial от здесь .

Я получил точный результат, имея соединение inte rnet. Теперь мне нужно получить тот же результат в среде без соединения inte rnet. Я скопировал maven репозитории и docker изображение в новую среду. Я уверен, что Maven и docker работает.

При попытке выполнить следующую команду com.google.cloud.tools:jib-maven-plugin:dockerBuild -Dimage=eureka я получаю сообщения об ошибках. Я предполагаю, что некоторые файлы плагин не может найти, но не уверен, какие именно.

Я добавляю сообщение об ошибке

[INFO] Scanning for projects...
[INFO]
[INFO] ---------------------------< com.ays:eureka >---------------------------
[INFO] Building eureka 0.0.1-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- jib-maven-plugin:2.1.0:dockerBuild (default-cli) @ eureka ---
[INFO]
[INFO] Containerizing application to Docker daemon as eureka...
[WARNING] Base image 'gcr.io/distroless/java:8' does not use a specific image digest - build may not be reproducible
[ERROR] I/O error for image [gcr.io/distroless/java]:
[ERROR]     org.apache.http.conn.ConnectTimeoutException
[ERROR]     Connect to gcr.io:443 [gcr.io/64.233.184.82] failed: connect timed out
[INFO] Executing tasks:
[INFO] [============                  ] 40,0% complete
[INFO] > building image to Docker daemon
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  22.409 s
[INFO] Finished at: 2020-04-13T16:37:23+03:00
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal com.google.cloud.tools:jib-maven-plugin:2.1.0:dockerBuild (default-cli) on project eureka: Connect to gcr.io:443 [gcr.io/64.233.184.82] failed: connect timed out -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException 

Может кто-нибудь указать мне, куда мне смотреть, или я что-то упускаю в этой точке?

Вот мой DockerFile

FROM openjdk:8-jdk-alpine
RUN addgroup -S spring && adduser -S spring -G spring
USER spring:spring
ARG DEPENDENCY=target/dependency
COPY ${DEPENDENCY}/BOOT-INF/lib /app/lib
COPY ${DEPENDENCY}/META-INF /app/META-INF
COPY ${DEPENDENCY}/BOOT-INF/classes /app
ENTRYPOINT ["java","-cp","app:app/lib/*","hello.Application"]`

Я ничего не изменил в DockerFile.

1 Ответ

2 голосов
/ 13 апреля 2020

Если вы не укажете базовое изображение, Jib по умолчанию использует gcr.io/distroless/java:8 в качестве базового изображения для Java 8 приложений.

Когда вы не используете указанный c дайджест изображения (например, как gcr.io/distroless/java@sha256:...), но вместо использования тега (в данном случае :8) для базового изображения, тег может со временем указывать на разные изображения. То есть, если вы создадите изображение спустя некоторое время, Jib может получить немного другое базовое изображение, чем раньше. Отсюда следующее предупреждение:

[WARNING] Base image 'gcr.io/distroless/java:8' does not use a specific image digest - build may not be reproducible

По этой причине, когда вы не используете дайджест, Jib обращается к реестру (gcr.io) и проверяет, находится ли локально кэшированное изображение (не в локальном *). 1039 * кеш двигателя, но собственный кеш Jib) обновлен. Если нет, Jib загрузит обновленное изображение. Вот почему вы получаете сообщение об ошибке.

У вас есть два варианта.

  1. Передача --offline в Maven из командной строки. Затем Jib будет использовать кэшированное базовое изображение; не будет онлайн-соединения. Конечно, чтобы это работало, Jib должен был кэшировать базовый образ раньше; вам нужно хотя бы раз запустить Jib онлайн, чтобы --offline работал позже.

  2. Используйте дайджест, чтобы зафиксировать указанное c базовое изображение. Например, в вашем pom.xml,

    <configuration>
      <from><image>gcr.io/distroless/java@sha256:e99eb6cf88ca2df69e99bf853d65f125066730e3e9f7a233bd1b7e3523c144cb</image></from>
    </configuration>
    

    Для Google Cloud Registry вы можете посетить https://gcr.io/distroless/java, чтобы найти дайджесты изображений в хранилище. Еще один способ найти дайджест - запустить Jib онлайн. После предупреждения вы увидите сообщение о текущем дайджесте тега.

    [WARNING] Base image 'gcr.io/distroless/java:8' does not use a specific image digest - build may not be reproducible
    [INFO] Using base image with digest: sha256:e99eb6cf88ca2df69e99bf853d65f125066730e3e9f7a233bd1b7e3523c144cb
    

Наконец, вы можете удалить свой Dockerfile. Jib не использует Dockerfile, Docker CLI или Docker daemon.

...