소스 검색

api: Remove <none> in Repo(Tags|Digests) for >= 1.43

Deprecate `<none>:<none>` and `<none>@<none>` magic strings included in
`RepoTags` and `RepoDigests`.
Produce an empty arrays instead and leave the presentation of
untagged/dangling images up to the client.

Signed-off-by: Paweł Gronowski <pawel.gronowski@docker.com>
Paweł Gronowski 2 년 전
부모
커밋
248745004a
4개의 변경된 파일19개의 추가작업 그리고 4개의 파일을 삭제
  1. 12 3
      api/server/router/image/image_routes.go
  2. 1 1
      daemon/images/image_prune.go
  3. 3 0
      docs/api/version-history.md
  4. 3 0
      testutil/environment/protect.go

+ 12 - 3
api/server/router/image/image_routes.go

@@ -338,9 +338,18 @@ func (ir *imageRouter) getImagesJSON(ctx context.Context, w http.ResponseWriter,
 	}
 
 	for _, img := range images {
-		if len(img.RepoTags) == 0 && len(img.RepoDigests) == 0 {
-			img.RepoTags = append(img.RepoTags, "<none>:<none>")
-			img.RepoDigests = append(img.RepoDigests, "<none>@<none>")
+		if versions.LessThan(version, "1.43") {
+			if len(img.RepoTags) == 0 && len(img.RepoDigests) == 0 {
+				img.RepoTags = append(img.RepoTags, "<none>:<none>")
+				img.RepoDigests = append(img.RepoDigests, "<none>@<none>")
+			}
+		} else {
+			if img.RepoTags == nil {
+				img.RepoTags = []string{}
+			}
+			if img.RepoDigests == nil {
+				img.RepoDigests = []string{}
+			}
 		}
 	}
 

+ 1 - 1
daemon/images/image_prune.go

@@ -109,7 +109,7 @@ deleteImagesLoop:
 					}
 				}
 
-				// Only delete if it's untagged (i.e. repo:<none>)
+				// Only delete if it has no references which is a valid NamedTagged.
 				shouldDelete = !hasTag
 			}
 

+ 3 - 0
docs/api/version-history.md

@@ -20,6 +20,9 @@ keywords: "API, Docker, rcli, REST, documentation"
 * `POST /containers/create` now accepts `Annotations` as part of `HostConfig`.
   Can be used to attach arbitrary metadata to the container, which will also be
   passed to the runtime when the container is started.
+* `GET /images/json` no longer includes hardcoded `<none>:<none>` and
+  `<none>@<none>` in `RepoTags` and`RepoDigests` for untagged images.
+  In such cases, empty arrays will be produced instead.
 
 ## v1.42 API changes
 

+ 3 - 0
testutil/environment/protect.go

@@ -118,6 +118,9 @@ func getExistingImages(t testing.TB, testEnv *Execution) []string {
 func tagsFromImageSummary(image types.ImageSummary) []string {
 	var result []string
 	for _, tag := range image.RepoTags {
+		// Starting from API 1.43 no longer outputs the hardcoded <none>
+		// strings. But since the tests might be ran against a remote
+		// daemon/pre 1.43 CLI we must still be able to handle it.
 		if tag != "<none>:<none>" {
 			result = append(result, tag)
 		}