2323import java .net .URLEncoder ;
2424import java .nio .charset .StandardCharsets ;
2525import java .nio .file .Path ;
26+ import java .util .List ;
2627import java .util .Objects ;
2728import java .util .regex .Matcher ;
2829import java .util .regex .Pattern ;
@@ -391,13 +392,16 @@ public static ContainerRef parse(String name) {
391392 */
392393 public String getEffectiveRegistry (Registry target ) {
393394 if (isUnqualified ()) {
395+ String key = getAliasKey ();
396+ if (target .getRegistry () == null && target .getRegistriesConf ().hasAlias (key )) {
397+ return target .getRegistriesConf ().getAliases ().get (key );
398+ }
394399 return target .getRegistry () != null
395400 ? target .getRegistry ()
396401 : determineFirstUnqualifiedSearchRegistry (target );
397402 }
398403 return registry ;
399404 }
400-
401405 /**
402406 * Return a copy of reference for a registry other registry
403407 * @param registry The registry
@@ -414,6 +418,13 @@ public ContainerRef forRegistry(String registry) {
414418 */
415419 public ContainerRef forRegistry (Registry registry ) {
416420 if (isUnqualified () && registry .getRegistry () == null ) {
421+ String key = getAliasKey ();
422+ if (registry .getRegistry () == null && registry .getRegistriesConf ().hasAlias (key )) {
423+ String newLocation = registry .getRegistriesConf ().getAliases ().get (key );
424+ String newRefString = "%s:%s" .formatted (newLocation , tag );
425+ LOG .info ("Using {} as an alias to {}" , key , newRefString );
426+ return ContainerRef .parse (newRefString );
427+ }
417428 LOG .info (
418429 "The container reference {} was created without a registry. Will try to resolve using unqualified-search-registries in order" ,
419430 this );
@@ -429,6 +440,15 @@ public ContainerRef forRegistry(Registry registry) {
429440 digest );
430441 }
431442
443+ /**
444+ * Return the key of the alias
445+ */
446+ private String getAliasKey () {
447+ return getRegistry ().equals (Const .DEFAULT_REGISTRY ) && "library" .equals (getNamespace ())
448+ ? getRepository ()
449+ : getFullRepository ();
450+ }
451+
432452 private String determineFirstUnqualifiedSearchRegistry (Registry registry ) {
433453 // No settings, keep old behavior of defaulting to docker.io for unqualified reference
434454 if (registry .getRegistriesConf ().getUnqualifiedRegistries ().isEmpty ()) {
@@ -437,13 +457,15 @@ private String determineFirstUnqualifiedSearchRegistry(Registry registry) {
437457 LOG .debug (
438458 "Found registries in unqualified-search-registries: {}" ,
439459 registry .getRegistriesConf ().getUnqualifiedRegistries ());
440- for (String searchRegistry : registry .getRegistriesConf ().getUnqualifiedRegistries ()) {
460+ List <String > unqualifiedRegistries = registry .getRegistriesConf ().getUnqualifiedRegistries ();
461+ for (String searchRegistry : unqualifiedRegistries ) {
441462 Registry targetRegistry = registry .copy (registry , searchRegistry );
442463 LOG .debug ("Checking if container {} exists in unqualified search registry {}" , this , searchRegistry );
443464 if (targetRegistry .exists (this )) {
444465 LOG .debug ("Found container {} in unqualified search registry {}" , this , searchRegistry );
445466 return searchRegistry ;
446467 }
468+ LOG .debug ("Container {} does not exist in unqualified search registry {}" , this , searchRegistry );
447469 }
448470 throw new OrasException (
449471 "Container reference %s is unqualified and cannot be found in any of the unqualified search registries: %s"
0 commit comments