Мы экспериментируем с Spring Native, следуя их гид. Кроме того, мы хотим использовать Gradle и Сборки. Мы соответствующим образом адаптировали нашу конфигурацию (build.gradle
) и запустили ./gradlew bootBuildImage
, чтобы создать образ Spring Native.
Проблема возникает из-за того, что мы вынуждены использовать собственный реестр образов Docker нашей компании. Поэтому мы не можем напрямую вытащить e. грамм. docker.io/paketobuildpacks/run:tiny-cnb
, но нужно использовать что-то вроде docker-io.docker-proxy.ourcompany.com/paketobuildpacks/run:tiny-cnb
.
Мы уже извлекли и повторно пометили образ строителя paketobuildpacks/builder
, который использовался в процессе. Но поскольку все остальное происходит внутри этого контейнера сборки, мы не можем использовать это решение дальше. Итак, мы получаем:
* What went wrong:
Execution failed for task ':bootBuildImage'.
> Docker API call to 'localhost/v1.24/images/create?fromImage=docker.io%2Fpaketobuildpacks%2Frun%3Atiny-cnb' failed with status code 500 "Internal Server Error" and message "Get "https://registry-1.docker.io/v2/": context deadline exceeded"
(Возможно, потому что попытка подключения к *.docker.io
просто истечет по тайм-ауту.)
На данный момент мы не нашли возможности настроить реестр Docker, используемый процессом. Мы также могли бы найти большее «дерево» дополнительных зависимостей, необходимых позже в процессе, описанных в таких файлах, как здесь (где gcr.io
упоминается вместо docker.io
).
Нам никоим образом не будет позволено получить прямой доступ к публичным реестрам и, таким образом, не будет никаких дальнейших идей. Итак, можете ли вы придумать какую-либо разумную возможность для достижения нашей цели по созданию образа Spring Native с использованием ваших собственных реестров прокси?
Спасибо заранее!
@SergioSantiago, спасибо, да, мы думали об этом решении. Но нам не хватает не прокси, а пользовательского реестра «перенаправление». Попытка войти в реестр нашей компании в качестве прокси-сервера в упомянутой конфигурации ничего не изменила. (Кроме того, для правильной работы реестр нашей компании должен быть доступен через имя хоста... :( )
С помощью pack
cli вы можете запустить pack config registry-mirrors add <registry> [-m <mirror...] [flags]
, например: pack config registry-mirrors add index.docker.io --mirror 10.0.0.1
, где 10.0.0.1
— ваш личный реестр.
https://buildpacks.io/docs/tools/pack/cli/pack_config_registry-mirrors_add/
В поддержке Spring Boot Gradle у вас есть настройки docker.builderRegistry
и docker.publishRegistry
, но они в основном используются для предоставления учетных данных, которые будут использоваться для извлечения или публикации изображений из реестра. Они не совсем делают то, что нам здесь нужно.
Поддержка зеркальных функций, как в pack
cli, в настоящее время невозможна. проблема была открыта для отслеживания поддержки этого, так что, надеюсь, он будет доступен в будущем выпуске.
А пока вы можете использовать pack
cli с опцией зеркала выше для создания изображений.
Быстрый способ проверить/подтвердить:
Беги docker run -d -p 5000:5000 --restart=always --name=registry -e REGISTRY_PROXY_REMOTEURL=https://registry-1.docker.io registry:2
. Это запустит локальный реестр, который зеркала Docker Hub.
Запустите pack config registry-mirrors add '*' --mirror localhost:5000
, чтобы указать pack
cli использовать зеркало реестра.
Запустите pack build
против вашего приложения. Вы должны увидеть вывод, например:
Using mirror localhost:5000/paketobuildpacks/builder:base for index.docker.io/paketobuildpacks/builder:base
base: Pulling from paketobuildpacks/builder
83525de54a98: Pulling fs layer
807f554cf05f: Pulling fs layer
...
Если вы видите эту линию, вы знаете, что она работает правильно.
Вы также должны увидеть это в своей конфигурации pack
:
> cat ~/.pack/config.toml
[registry-mirrors]
"*" = "localhost:5000"
Это означает, что у вас правильно настроено зеркало реестра.
Спасибо, @Daniel Mikusa, но у этого решения есть два недостатка. :( Блок в build.gradle
действительно заставляет загрузить образ билдера из нашего кастомного реестра. Но потом я получаю: Execution failed for task ':bootBuildImage'. > Run image 'docker.io/paketobuildpacks/run:tiny-cnb' must be pulled from the 'docker-io.docker-proxy.ourcompany.com' authenticated registry
. Чего я не понимаю, потому что именно это и произошло, я даже могу потом найти образ с помощью docker images
(после предварительно обрезав систему Docker).
Мы также думали о решении для пакета cli, но нам нужно было бы применить этот параметр в пределах к контейнеру сборки, а в этом образе билдера нет пакета cli. :(
И еще одно дополнение: исключение gradle из моего первого комментария встречается только в сочетании с bootBuildImage {builder = "docker-remote-docker-io.artifacts.ruv.de/paketobuildpacks/builder:tiny"}
в нашем build.gradle
. Если я удалю этот параметр, процесс завершится ошибкой из-за того, что снова не будет достигнуто docker.io
.
Хм, мне придется спросить о конфигурации Gradle. Я пошел на тест, и мне потребовались кредиты, даже если наш внутренний кеш докеров не защищен паролем. Что касается pack
cli, вы должны иметь возможность использовать в конструкторе то, что вам не нужно. Вам просто нужен пакет cli на вашей сборочной машине, практически везде, где вы запускаете ./gradlew bootBuildImage
. Вместо того, чтобы бежать ./gradlew bootBuildImage
, вы бежите pack build
.
Извините за опоздание с ответом! Я также столкнулся с проблемой учетных данных, но смог обойти ее, используя некоторые действительные учетные данные. Я также попробовал ваше решение с помощью pack config...
, но проблема сохраняется без каких-либо изменений при его использовании. :(
Я обновил это, добавив несколько заметок о поддержке Spring Boot. Я не думаю, что это будет работать так, как сейчас, но сейчас открыта проблема, чтобы поддержать это. Что касается пакета, я добавил больше деталей в свой ответ. Эти шаги должны работать. Я проверил их и предоставил шаги для тестирования/проверки. Если вам не повезло с пакетом, я бы посоветовал вам открыть новый вопрос, поскольку этот вопрос был направлен на поддержку Spring Boot. Не стесняйтесь упоминать меня в этом вопросе.
Спасибо за терпение и профессиональную помощь! Я не могу попробовать это до следующей недели, но, как вы сказали, это в основном проблема Spring Boot, поэтому я считаю, что мой вопрос решен.
Вы проверяли официальную документацию docs.docker.com/network/proxy?