diff --git a/components/engine/.mailmap b/components/engine/.mailmap index 4dc2d65f04..828ea78481 100644 --- a/components/engine/.mailmap +++ b/components/engine/.mailmap @@ -177,6 +177,7 @@ Huu Nguyen Hyzhou Zhy Hyzhou Zhy <1187766782@qq.com> Ilya Khlopotov +Ivan Markin Jack Laxson Jacob Atzen Jacob Tomlinson @@ -210,6 +211,7 @@ John Howard (VM) John Howard (VM) John Howard (VM) John Stephens +Jon Surrell Jordan Arentsen Jordan Jennings Jorit Kleine-Möllhoff @@ -379,6 +381,7 @@ Stefan Berger Stefan Berger Stefan J. Wernli Stefan S. +Stephan Spindler Stephen Day Stephen Day Steve Desmond @@ -436,6 +439,8 @@ Vincent Demeester Vishnu Kannan Vladimir Rutsky Walter Stanish +Wang Chao +Wang Chao Wang Guoliang Wang Jie Wang Ping diff --git a/components/engine/AUTHORS b/components/engine/AUTHORS index 84059b7c2e..c5dafd7228 100644 --- a/components/engine/AUTHORS +++ b/components/engine/AUTHORS @@ -374,6 +374,7 @@ Dan Levy Dan McPherson Dan Stine Dan Williams +Dani Louca Daniel Antlinger Daniel Dao Daniel Exner @@ -740,7 +741,7 @@ Isao Jonas Ivan Babrou Ivan Fraixedes Ivan Grcic -Ivan Markin +Ivan Markin J Bruni J. Nunn Jack Danger Canty @@ -886,6 +887,7 @@ John V. Martinez John Warwick John Willis Jon Johnson +Jon Surrell Jon Wedaman Jonas Pfenniger Jonathan A. Sternberg @@ -1161,6 +1163,7 @@ Matt Hoyle Matt McCormick Matt Moore Matt Richardson +Matt Rickard Matt Robenolt Matt Schurenko Matt Williams @@ -1317,6 +1320,7 @@ Nikolay Milovanov Nirmal Mehta Nishant Totla NIWA Hideyuki +Noah Meyerhans Noah Treuhaft noducks Nolan Darilek @@ -1365,6 +1369,7 @@ Paul Nasrat Paul Weaver Paulo Ribeiro Pavel Lobashov +Pavel Pletenev Pavel Pospisil Pavel Sutyrin Pavel Tikhomirov @@ -1642,6 +1647,7 @@ Stefan S. Stefan Scherer Stefan Staudenmeyer Stefan Weil +Stephan Spindler Stephen Crosby Stephen Day Stephen Drake @@ -1823,7 +1829,7 @@ Vojtech Vitek (V-Teq) waitingkuo Walter Leibbrandt Walter Stanish -WANG Chao +Wang Chao Wang Guoliang Wang Jie Wang Long @@ -1834,6 +1840,7 @@ Ward Vandewege WarheadsSE Wayne Chang Wayne Song +Weerasak Chongnguluam Wei Wu Wei-Ting Kuo weiyan diff --git a/components/engine/api/common.go b/components/engine/api/common.go index 97a92f8b78..beb251a989 100644 --- a/components/engine/api/common.go +++ b/components/engine/api/common.go @@ -3,7 +3,7 @@ package api // import "github.com/docker/docker/api" // Common constants for daemon and client. const ( // DefaultVersion of Current REST API - DefaultVersion string = "1.36" + DefaultVersion string = "1.37" // NoBaseImageSpecifier is the symbol used by the FROM // command to specify that no base image is to be used. diff --git a/components/engine/api/server/router/swarm/cluster_routes.go b/components/engine/api/server/router/swarm/cluster_routes.go index 865ed6add6..6b13bf331d 100644 --- a/components/engine/api/server/router/swarm/cluster_routes.go +++ b/components/engine/api/server/router/swarm/cluster_routes.go @@ -373,7 +373,7 @@ func (sr *swarmRouter) createSecret(ctx context.Context, w http.ResponseWriter, return err } version := httputils.VersionFromContext(ctx) - if secret.Templating != nil && versions.LessThan(version, "1.36") { + if secret.Templating != nil && versions.LessThan(version, "1.37") { return errdefs.InvalidParameter(errors.Errorf("secret templating is not supported on the specified API version: %s", version)) } @@ -445,7 +445,7 @@ func (sr *swarmRouter) createConfig(ctx context.Context, w http.ResponseWriter, } version := httputils.VersionFromContext(ctx) - if config.Templating != nil && versions.LessThan(version, "1.36") { + if config.Templating != nil && versions.LessThan(version, "1.37") { return errdefs.InvalidParameter(errors.Errorf("config templating is not supported on the specified API version: %s", version)) } diff --git a/components/engine/daemon/prune.go b/components/engine/daemon/prune.go index 7ed73f0594..eee9e106bd 100644 --- a/components/engine/daemon/prune.go +++ b/components/engine/daemon/prune.go @@ -10,6 +10,7 @@ import ( "github.com/docker/docker/api/types" "github.com/docker/docker/api/types/filters" timetypes "github.com/docker/docker/api/types/time" + "github.com/docker/docker/errdefs" "github.com/docker/docker/image" "github.com/docker/docker/layer" "github.com/docker/docker/pkg/directory" @@ -193,16 +194,6 @@ func (daemon *Daemon) ImagesPrune(ctx context.Context, pruneFilters filters.Args } else { allImages = daemon.imageStore.Map() } - allContainers := daemon.List() - imageRefs := map[string]bool{} - for _, c := range allContainers { - select { - case <-ctx.Done(): - return nil, ctx.Err() - default: - imageRefs[c.ID] = true - } - } // Filter intermediary images and get their unique size allLayers := make(map[layer.ChainID]layer.Layer) @@ -242,14 +233,8 @@ deleteImagesLoop: default: } - dgst := digest.Digest(id) - hex := dgst.Hex() - if _, ok := imageRefs[hex]; ok { - continue - } - deletedImages := []types.ImageDeleteResponseItem{} - refs := daemon.referenceStore.References(dgst) + refs := daemon.referenceStore.References(id.Digest()) if len(refs) > 0 { shouldDelete := !danglingOnly if !shouldDelete { @@ -268,17 +253,16 @@ deleteImagesLoop: if shouldDelete { for _, ref := range refs { imgDel, err := daemon.ImageDelete(ref.String(), false, true) - if err != nil { - logrus.Warnf("could not delete reference %s: %v", ref.String(), err) + if imageDeleteFailed(ref.String(), err) { continue } deletedImages = append(deletedImages, imgDel...) } } } else { + hex := id.Digest().Hex() imgDel, err := daemon.ImageDelete(hex, false, true) - if err != nil { - logrus.Warnf("could not delete image %s: %v", hex, err) + if imageDeleteFailed(hex, err) { continue } deletedImages = append(deletedImages, imgDel...) @@ -309,6 +293,18 @@ deleteImagesLoop: return rep, nil } +func imageDeleteFailed(ref string, err error) bool { + switch { + case err == nil: + return false + case errdefs.IsConflict(err): + return true + default: + logrus.Warnf("failed to prune image %s: %v", ref, err) + return true + } +} + // localNetworksPrune removes unused local networks func (daemon *Daemon) localNetworksPrune(ctx context.Context, pruneFilters filters.Args) *types.NetworksPruneReport { rep := &types.NetworksPruneReport{} diff --git a/components/engine/docs/api/version-history.md b/components/engine/docs/api/version-history.md index 3405083776..51111bf061 100644 --- a/components/engine/docs/api/version-history.md +++ b/components/engine/docs/api/version-history.md @@ -18,6 +18,10 @@ keywords: "API, Docker, rcli, REST, documentation" [Docker Engine API v1.37](https://docs.docker.com/engine/api/v1.36/) documentation * `POST /containers/create` and `POST /services/create` now supports exposing SCTP ports. +* `POST /configs/create` and `POST /configs/{id}/create` now accept a `Templating` driver. +* `GET /configs` and `GET /configs/{id}` now return the `Templating` driver of the config. +* `POST /secrets/create` and `POST /secrets/{id}/create` now accept a `Templating` driver. +* `GET /secrets` and `GET /secrets/{id}` now return the `Templating` driver of the secret. ## v1.36 API changes diff --git a/components/engine/oci/defaults.go b/components/engine/oci/defaults.go index 578da3a81b..4145412dd4 100644 --- a/components/engine/oci/defaults.go +++ b/components/engine/oci/defaults.go @@ -115,6 +115,7 @@ func DefaultLinuxSpec() specs.Spec { s.Linux = &specs.Linux{ MaskedPaths: []string{ "/proc/kcore", + "/proc/keys", "/proc/latency_stats", "/proc/timer_list", "/proc/timer_stats",