diff --git a/api/server/router/container/container_routes.go b/api/server/router/container/container_routes.go
index dbaa43da63..5a2883324c 100644
--- a/api/server/router/container/container_routes.go
+++ b/api/server/router/container/container_routes.go
@@ -439,6 +439,12 @@ func (s *containerRouter) postContainerUpdate(ctx context.Context, w http.Respon
if versions.LessThan(httputils.VersionFromContext(ctx), "1.40") {
updateConfig.PidsLimit = nil
}
+
+ if versions.GreaterThanOrEqualTo(httputils.VersionFromContext(ctx), "1.42") {
+ // Ignore KernelMemory removed in API 1.42.
+ updateConfig.KernelMemory = 0
+ }
+
if updateConfig.PidsLimit != nil && *updateConfig.PidsLimit <= 0 {
// Both `0` and `-1` are accepted to set "unlimited" when updating.
// Historically, any negative value was accepted, so treat them as
@@ -505,6 +511,11 @@ func (s *containerRouter) postContainersCreate(ctx context.Context, w http.Respo
}
}
+ if hostConfig != nil && versions.GreaterThanOrEqualTo(version, "1.42") {
+ // Ignore KernelMemory removed in API 1.42.
+ hostConfig.KernelMemory = 0
+ }
+
var platform *specs.Platform
if versions.GreaterThanOrEqualTo(version, "1.41") {
if v := r.Form.Get("platform"); v != "" {
diff --git a/api/swagger.yaml b/api/swagger.yaml
index a0588f0bd3..897be13090 100644
--- a/api/swagger.yaml
+++ b/api/swagger.yaml
@@ -577,17 +577,6 @@ definitions:
type: "array"
items:
$ref: "#/definitions/DeviceRequest"
- KernelMemory:
- description: |
- Kernel memory limit in bytes.
-
-
-
- > **Deprecated**: This field is deprecated as the kernel 5.4 deprecated
- > `kmem.limit_in_bytes`.
- type: "integer"
- format: "int64"
- example: 209715200
KernelMemoryTCP:
description: "Hard limit for kernel TCP buffer memory (in bytes)."
type: "integer"
@@ -4657,16 +4646,6 @@ definitions:
description: "Indicates if the host has memory swap limit support enabled."
type: "boolean"
example: true
- KernelMemory:
- description: |
- Indicates if the host has kernel memory limit support enabled.
-
-
-
- > **Deprecated**: This field is deprecated as the kernel 5.4 deprecated
- > `kmem.limit_in_bytes`.
- type: "boolean"
- example: true
KernelMemoryTCP:
description: |
Indicates if the host has kernel memory TCP limit support enabled.
@@ -5834,7 +5813,6 @@ paths:
Memory: 0
MemorySwap: 0
MemoryReservation: 0
- KernelMemory: 0
NanoCpus: 500000
CpuPercent: 80
CpuShares: 512
@@ -6126,7 +6104,6 @@ paths:
Memory: 0
MemorySwap: 0
MemoryReservation: 0
- KernelMemory: 0
OomKillDisable: false
OomScoreAdj: 500
NetworkMode: "bridge"
@@ -6871,7 +6848,6 @@ paths:
Memory: 314572800
MemorySwap: 514288000
MemoryReservation: 209715200
- KernelMemory: 52428800
RestartPolicy:
MaximumRetryCount: 4
Name: "on-failure"
diff --git a/daemon/daemon_unix.go b/daemon/daemon_unix.go
index e5c6dbbc5a..f2b6979d2b 100644
--- a/daemon/daemon_unix.go
+++ b/daemon/daemon_unix.go
@@ -445,17 +445,16 @@ func verifyPlatformContainerResources(resources *containertypes.Resources, sysIn
// Kernel memory limit is not supported on cgroup v2.
// Even on cgroup v1, kernel memory limit (`kmem.limit_in_bytes`) has been deprecated since kernel 5.4.
// https://github.com/torvalds/linux/commit/0158115f702b0ba208ab0b5adf44cae99b3ebcc7
- warnings = append(warnings, "Specifying a kernel memory limit is deprecated and will be removed in a future release.")
- }
- if resources.KernelMemory > 0 && !sysInfo.KernelMemory {
- warnings = append(warnings, "Your kernel does not support kernel memory limit capabilities or the cgroup is not mounted. Limitation discarded.")
- resources.KernelMemory = 0
- }
- if resources.KernelMemory > 0 && resources.KernelMemory < linuxMinMemory {
- return warnings, fmt.Errorf("Minimum kernel memory limit allowed is 6MB")
- }
- if resources.KernelMemory > 0 && !kernel.CheckKernelVersion(4, 0, 0) {
- warnings = append(warnings, "You specified a kernel memory limit on a kernel older than 4.0. Kernel memory limits are experimental on older kernels, it won't work as expected and can cause your system to be unstable.")
+ if !sysInfo.KernelMemory {
+ warnings = append(warnings, "Your kernel does not support kernel memory limit capabilities or the cgroup is not mounted. Limitation discarded.")
+ resources.KernelMemory = 0
+ }
+ if resources.KernelMemory < linuxMinMemory {
+ return warnings, fmt.Errorf("Minimum kernel memory limit allowed is 6MB")
+ }
+ if !kernel.CheckKernelVersion(4, 0, 0) {
+ warnings = append(warnings, "You specified a kernel memory limit on a kernel older than 4.0. Kernel memory limits are experimental on older kernels, it won't work as expected and can cause your system to be unstable.")
+ }
}
if resources.OomKillDisable != nil && !sysInfo.OomKillDisable {
// only produce warnings if the setting wasn't to *disable* the OOM Kill; no point
diff --git a/docs/api/version-history.md b/docs/api/version-history.md
index 4e7f89d2d8..09b1fab4ce 100644
--- a/docs/api/version-history.md
+++ b/docs/api/version-history.md
@@ -42,6 +42,9 @@ keywords: "API, Docker, rcli, REST, documentation"
versioned, and affects all API versions if the daemon has this patch.
* The `POST /containers/{id}/wait` endpoint now returns a `400` status code if an
invalid `condition` is provided (on API 1.30 and up).
+* Removed the `KernelMemory` field from the `POST /containers/create` and
+ `POST /containers/{id}/update` endpoints, any value it is set to will be ignored.
+ This field has been deprecated in `v1.41`.
## v1.41 API changes
diff --git a/pkg/sysinfo/sysinfo_linux.go b/pkg/sysinfo/sysinfo_linux.go
index ac858f452f..492f6247df 100644
--- a/pkg/sysinfo/sysinfo_linux.go
+++ b/pkg/sysinfo/sysinfo_linux.go
@@ -149,10 +149,6 @@ func applyMemoryCgroupInfo(info *SysInfo) {
if !info.MemorySwappiness {
info.Warnings = append(info.Warnings, "Your kernel does not support memory swappiness")
}
- info.KernelMemory = cgroupEnabled(mountPoint, "memory.kmem.limit_in_bytes")
- if !info.KernelMemory {
- info.Warnings = append(info.Warnings, "Your kernel does not support kernel memory limit")
- }
info.KernelMemoryTCP = cgroupEnabled(mountPoint, "memory.kmem.tcp.limit_in_bytes")
if !info.KernelMemoryTCP {
info.Warnings = append(info.Warnings, "Your kernel does not support kernel memory TCP limit")