spring-cloud - 如何在 Spring Cloud 数据流 2.6.1 中从私有仓库注册应用程序
问题描述
我在 Openshift 3 中使用 SCDF 2.6.1,在注册应用程序时遇到错误,错误日志如下:
java.lang.NullPointerException: null
at org.springframework.cloud.dataflow.configuration.metadata.container.DefaultContainerImageMetadataResolver.getRegistryRequest(DefaultContainerImageMetadataResolver.java:162)
at org.springframework.cloud.dataflow.configuration.metadata.container.DefaultContainerImageMetadataResolver.getImageLabels(DefaultContainerImageMetadataResolver.java:110)
at org.springframework.cloud.dataflow.configuration.metadata.BootApplicationConfigurationMetadataResolver.resolvePortNamesFromContainerImage(BootApplicationConfigurationMetadataResolver.java:215)
at org.springframework.cloud.dataflow.configuration.metadata.BootApplicationConfigurationMetadataResolver.listPortNames(BootApplicationConfigurationMetadataResolver.java:163)
at org.springframework.cloud.dataflow.server.controller.AppRegistryController.getInfo(AppRegistryController.java:193)
at org.springframework.cloud.dataflow.server.controller.AppRegistryController.info(AppRegistryController.java:162)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
我检查了代码行DefaultContainerImageMetadataResolver.java:162
// Convert the image name into a well-formed ContainerImage
ContainerImage containerImage = this.containerImageParser.parse(imageName);
// Find a registry configuration that matches the image's registry host
RegistryConfiguration registryConf = this.registryConfigurationMap.get(containerImage.getRegistryHost());
// Retrieve a registry authorizer that supports the configured authorization type.
RegistryAuthorizer registryAuthorizer = this.registryAuthorizerMap.get(registryConf.getAuthorizationType());
我很确定错误是因为registryConf
null 作为结果
RegistryConfiguration registryConf = this.registryConfigurationMap.get(containerImage.getRegistryHost());
如何将我的私人回购 URI 放入registryConfigurationMap
?
我试图放入imagePullSecret
在私人仓库注册的deployment.yml,但我认为它不起作用,因为在启动日志中,我仍然看到:
2020-09-03 04:55:24.111 INFO 1 --- [ main] urationMetadataResolverAutoConfiguration :
Final Registry Configurations: {registry-1.docker.io=RegistryConfiguration{registryHost='registry-1.docker.io', user='null', secret='****'', authorizationType=dockeroauth2, manifestMediaType='application/vnd.docker.distribution.manifest.v2+json', disableSslVerification='false',
extra={registryAuthUri=https://auth.docker.io/token?service=registry.docker.io&scope=repository:{repository}:pull&offline_token=1&client_id=shell }}}
解决方案
SCDF 服务器下载容器镜像层的唯一地方是它查找应用程序元数据的时候。目前,它被配置为使用docker 注册表主机(因为这是托管所有开箱即用的应用程序的地方)。
如果要覆盖,可以在服务器启动时修改这些属性值并继续。
记住这个配置只需要下载镜像的应用元数据层——而不是在 SCDF 服务器端下载整个容器镜像。
推荐阅读
- angular - 使用 highcharts-angular 更改主题
- python - 如果“i”被定义为一个整数,它如何知道 question==answers 与否?
- c++ - C++ - Cin.ignore 并从其他文件中获取数据
- python - 朴素贝叶斯分类器中特征值的快速计数
- sql - 带有别名的 SQL Server 2008 汇总
- git - 恢复错误合并后恢复丢失的更改
- plot - gnuplot:在 splot 的 xy 平面上投影轴标签和抽动
- discord.js - 如何忽略前 2 个机器人反应?
- c# - 如何在 C# 中反序列化对象包含 Union 字段的 Json 对象?
- php - 使用 PHP 和 POST 请求删除 JSON 数据