Skip to content

Commit 0be5e82

Browse files
committed
Normalize docker image name
1 parent baa1655 commit 0be5e82

File tree

1 file changed

+32
-3
lines changed

1 file changed

+32
-3
lines changed

src/main/java/com/iexec/worker/docker/DockerClientService.java

Lines changed: 32 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
private 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

Comments
 (0)