@@ -78,9 +78,18 @@ public struct ImageReference: Sendable, Equatable, CustomStringConvertible, Cust
7878 public init ( fromString reference: String , defaultRegistry: String = " localhost:5000 " ) throws {
7979 let ( registry, remainder) = try splitReference ( reference)
8080 let ( repository, reference) = try parseName ( remainder)
81+
82+ // As a special case, do not expand the reference for the unqualified 'scratch' image as it is handled locally.
83+ if registry == nil && repository. value == " scratch " {
84+ self . registry = " "
85+ self . repository = repository
86+ self . reference = reference
87+ return
88+ }
89+
8190 self . registry = registry ?? defaultRegistry
8291 if self . registry == " docker.io " {
83- self . registry = " index.docker.io " // Special case for docker client , there is no network-level redirect
92+ self . registry = " index.docker.io " // Special case for Docker Hub , there is no network-level redirect
8493 }
8594 // As a special case, official images can be referred to by a single name, such as `swift` or `swift:slim`.
8695 // moby/moby assumes that these names refer to images in `library`: `library/swift` or `library/swift:slim`.
@@ -111,7 +120,11 @@ public struct ImageReference: Sendable, Equatable, CustomStringConvertible, Cust
111120
112121 /// Printable description of an ImageReference in a form which can be understood by a runtime
113122 public var description : String {
114- " \( registry) / \( repository) \( reference. separator) \( reference) "
123+ if registry == " " {
124+ " \( repository) \( reference. separator) \( reference) "
125+ } else {
126+ " \( registry) / \( repository) \( reference. separator) \( reference) "
127+ }
115128 }
116129
117130 /// Printable description of an ImageReference in a form suitable for debugging.
0 commit comments