问题描述
我在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服务器端下载整个容器映像。