feat: add cpu_shares to mastercontainer and sibling containers

Weight CPU shares so the mastercontainer and core containers stay
responsive under heavy load from optional containers.

Signed-off-by: Simon L. <szaimen@e.mail.de>
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Simon L.
2026-08-27 09:57:22 +02:00
co-authored by Claude Opus 5
parent c2616be933
commit d579eacbd5
11 changed files with 65 additions and 19 deletions
+1
View File
@@ -33,6 +33,7 @@ docker run \
--rm \
--name nextcloud-aio-mastercontainer \
--oom-score-adj -500 \
--cpu-shares 2048 \
--volume nextcloud_aio_mastercontainer:/mnt/docker-aio-config \
--volume /var/run/docker.sock:/var/run/docker.sock \
ghcr.io/nextcloud-releases/all-in-one:latest
+5
View File
@@ -148,6 +148,11 @@
"shm_size": {
"type": "integer"
},
"cpu_shares": {
"type": "integer",
"minimum": 512,
"maximum": 2048
},
"secrets": {
"type": "array",
"items": {
+38 -19
View File
@@ -83,7 +83,8 @@
"cap_drop": [
"NET_RAW"
],
"oom_score_adj": -100
"oom_score_adj": -100,
"cpu_shares": 1024
},
{
"container_name": "nextcloud-aio-database",
@@ -141,7 +142,8 @@
"cap_drop": [
"NET_RAW"
],
"oom_score_adj": -300
"oom_score_adj": -300,
"cpu_shares": 1024
},
{
"container_name": "nextcloud-aio-nextcloud",
@@ -287,7 +289,8 @@
"cap_drop": [
"NET_RAW"
],
"oom_score_adj": -100
"oom_score_adj": -100,
"cpu_shares": 1024
},
{
"container_name": "nextcloud-aio-notify-push",
@@ -329,7 +332,8 @@
"cap_drop": [
"NET_RAW"
],
"oom_score_adj": 100
"oom_score_adj": 100,
"cpu_shares": 1024
},
{
"container_name": "nextcloud-aio-redis",
@@ -373,7 +377,8 @@
"cap_drop": [
"NET_RAW"
],
"oom_score_adj": -300
"oom_score_adj": -300,
"cpu_shares": 1024
},
{
"container_name": "nextcloud-aio-collabora",
@@ -424,7 +429,8 @@
"cap_drop": [
"NET_RAW"
],
"oom_score_adj": 300
"oom_score_adj": 300,
"cpu_shares": 512
},
{
"container_name": "nextcloud-aio-talk",
@@ -495,7 +501,8 @@
"cap_drop": [
"NET_RAW"
],
"oom_score_adj": 300
"oom_score_adj": 300,
"cpu_shares": 512
},
{
"container_name": "nextcloud-aio-talk-recording",
@@ -550,7 +557,8 @@
"cap_drop": [
"NET_RAW"
],
"oom_score_adj": 300
"oom_score_adj": 300,
"cpu_shares": 512
},
{
"container_name": "nextcloud-aio-borgbackup",
@@ -622,7 +630,8 @@
"/tmp",
"/nextcloud_aio_volumes"
],
"oom_score_adj": -300
"oom_score_adj": -300,
"cpu_shares": 1024
},
{
"container_name": "nextcloud-aio-watchtower",
@@ -646,7 +655,8 @@
"cap_drop": [
"NET_RAW"
],
"oom_score_adj": -300
"oom_score_adj": -300,
"cpu_shares": 1024
},
{
"container_name": "nextcloud-aio-domaincheck",
@@ -680,7 +690,8 @@
"cap_drop": [
"NET_RAW"
],
"oom_score_adj": 300
"oom_score_adj": 300,
"cpu_shares": 512
},
{
"container_name": "nextcloud-aio-clamav",
@@ -726,7 +737,8 @@
"cap_drop": [
"NET_RAW"
],
"oom_score_adj": 300
"oom_score_adj": 300,
"cpu_shares": 512
},
{
"container_name": "nextcloud-aio-onlyoffice",
@@ -771,7 +783,8 @@
"cap_drop": [
"NET_RAW"
],
"oom_score_adj": 300
"oom_score_adj": 300,
"cpu_shares": 512
},
{
"container_name": "nextcloud-aio-eurooffice",
@@ -821,7 +834,8 @@
"cap_drop": [
"NET_RAW"
],
"oom_score_adj": 300
"oom_score_adj": 300,
"cpu_shares": 512
},
{
"container_name": "nextcloud-aio-imaginary",
@@ -864,7 +878,8 @@
"secrets": [
"IMAGINARY_SECRET"
],
"oom_score_adj": 300
"oom_score_adj": 300,
"cpu_shares": 512
},
{
"container_name": "nextcloud-aio-fulltextsearch",
@@ -919,7 +934,8 @@
"cap_drop": [
"NET_RAW"
],
"oom_score_adj": 300
"oom_score_adj": 300,
"cpu_shares": 512
},
{
"container_name": "nextcloud-aio-docker-socket-proxy",
@@ -947,7 +963,8 @@
"cap_drop": [
"NET_RAW"
],
"oom_score_adj": 100
"oom_score_adj": 100,
"cpu_shares": 1024
},
{
"container_name": "nextcloud-aio-harp",
@@ -1000,7 +1017,8 @@
"profiles": [
"harp"
],
"oom_score_adj": 100
"oom_score_adj": 100,
"cpu_shares": 1024
},
{
"container_name": "nextcloud-aio-whiteboard",
@@ -1047,7 +1065,8 @@
"cap_drop": [
"NET_RAW"
],
"oom_score_adj": 300
"oom_score_adj": 300,
"cpu_shares": 512
}
]
}
+1
View File
@@ -30,6 +30,7 @@ readonly class Container {
/** @var string[] */
public array $sysctls,
public int $shmSize,
public int $cpuShares,
public bool $apparmorUnconfined,
/** @var string[] */
public array $backupVolumes,
+6
View File
@@ -318,6 +318,11 @@ readonly class ContainerDefinitionFetcher {
$shmSize = $entry['shm_size'];
}
$cpuShares = 512;
if (isset($entry['cpu_shares'])) {
$cpuShares = $entry['cpu_shares'];
}
$apparmorUnconfined = false;
if (isset($entry['apparmor_unconfined'])) {
$apparmorUnconfined = $entry['apparmor_unconfined'];
@@ -382,6 +387,7 @@ readonly class ContainerDefinitionFetcher {
$capAdd,
$sysctls,
$shmSize,
$cpuShares,
$apparmorUnconfined,
$backupVolumes,
$nextcloudExecCommands,
+5
View File
@@ -394,6 +394,11 @@ readonly class DockerActionManager {
$requestBody['HostConfig']['ShmSize'] = $shmSize;
}
$cpuShares = $container->cpuShares;
if ($cpuShares > 0) {
$requestBody['HostConfig']['CpuShares'] = $cpuShares;
}
$tmpfs = [];
foreach ($container->tmpfs as $tmp) {
$mode = "";