@@ -108,6 +108,8 @@ public boolean pullImage(String imageName) {
108108 NameParser .ReposTag repoAndTag = NameParser .parseRepositoryTag (imageName );
109109 if (StringUtils .isEmpty (repoAndTag .repos )
110110 || StringUtils .isEmpty (repoAndTag .tag )) {
111+ Exception e = new Exception ("Error parsing image name" );
112+ logError ("pull image" , imageName , "" , e );
111113 return false ;
112114 }
113115 try (PullImageCmd pullImageCmd =
@@ -125,17 +127,18 @@ public boolean pullImage(String imageName) {
125127 }
126128
127129 public String getImageId (String imageName ) {
128- if (StringUtils .isEmpty (imageName )) {
130+ String normalizedImageName = normalizeImageName (imageName );
131+ if (StringUtils .isEmpty (normalizedImageName )) {
129132 return "" ;
130133 }
131134 try (ListImagesCmd listImagesCmd = getClient ().listImagesCmd ()) {
132135 return listImagesCmd
133136 .withDanglingFilter (false )
134- .withImageNameFilter (imageName )
137+ .withImageNameFilter (normalizedImageName )
135138 .exec ()
136139 .stream ()
137140 .filter (image -> !StringUtils .isEmpty (image .getRepoTags ()))
138- .filter (image -> Arrays .asList (image .getRepoTags ()).contains (imageName ))
141+ .filter (image -> Arrays .asList (image .getRepoTags ()).contains (normalizedImageName ))
139142 .map (Image ::getId )
140143 .findFirst ()
141144 .orElse ("" );
@@ -395,6 +398,32 @@ DockerClient getClient() {
395398 return dockerConnectorService .getClient ();
396399 }
397400
401+ /**
402+ * Docker image names have the form:
403+ * registry-url/namespace/image:tag
404+ * Since the registry-url is optional
405+ * we need to remove it to have a
406+ * predictable format.
407+ *
408+ * @param imageName
409+ * @return imageName without registry url
410+ */
411+ public String normalizeImageName (String imageName ) {
412+ // TODO: check image tag here.
413+ if (StringUtils .isEmpty (imageName )) {
414+ return "" ;
415+ }
416+ String [] parts = imageName .split ("/" );
417+ int n = parts .length ;
418+ if (n == 1 ) {
419+ // official images do not have namespaces
420+ return imageName ;
421+ }
422+ // We are not sure if the registry url can
423+ // contain slashes so we anticipate that case.
424+ return parts [n -2 ] + "/" + parts [n -1 ];
425+ }
426+
398427 private void logInfo (String infoMessage , String name , String id ) {
399428 log .info ("{} [name:'{}', id:'{}']" , infoMessage , name , id );
400429 }
0 commit comments