如何在Spring Cloud Dataflow 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());

如何在registryConfigurationMap中放置我的私人仓库URI?

我试图将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 registry主机(因为是所有现成的应用程序所在的主机)。

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

请记住以下事实:仅需要下载映像的应用程序元数据层,而不必-即可在SCDF服务器端下载整个容器映像。