首页 > 解决方案 > 如何在 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());

我很确定错误是因为registryConfnull 作为结果

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 }}}

标签: spring-cloudspring-cloud-dataflow

解决方案


SCDF 服务器下载容器镜像层的唯一地方是它查找应用程序元数据的时候。目前,它被配置为使用docker 注册表主机(因为这是托管所有开箱即用的应用程序的地方)。

如果要覆盖,可以在服务器启动时修改这些属性值并继续。

记住这个配置只需要下载镜像的应用元数据层——而不是在 SCDF 服务器端下载整个容器镜像。


推荐阅读