docker_check_cpu_mem.sh
· 4.1 KiB · Bash
Ham
#!/bin/bash
set -euo pipefail
MEM_WARN_MIB=1024
MEM_CRIT_MIB=4096
SWAP_WARN_MIB=2048
SWAP_CRIT_MIB=8192
CPU_WARN=1.0
CPU_CRIT=2.0
W_NAME_VAL=40
RED="\033[0;31m"
YELLOW="\033[0;33m"
GREEN="\033[0;32m"
BLUE="\033[0;34m"
NC="\033[0m"
to_mib() { echo $(( (${1:-0}) / 1024 / 1024 )); }
human_bytes() {
local b="${1:-0}"
if [ -z "$b" ] || [ "$b" = "0" ]; then echo "unlimited"; return; fi
local mib=$((b / 1024 / 1024))
if [ "$mib" -ge 1024 ]; then echo "$((mib/1024))GiB"; else echo "${mib}MiB"; fi
}
pad_name() {
# fixed width name (NO COLORS)
printf "%-${W_NAME_VAL}.${W_NAME_VAL}s" "$1"
}
declare -A ST_CPU
declare -A ST_MEM
while IFS=$'\t' read -r name cpu mem; do
name="$(echo "$name" | xargs)"
ST_CPU["$name"]="$(echo "$cpu" | xargs)"
ST_MEM["$name"]="$(echo "$mem" | xargs)"
done < <(docker stats --no-stream --format '{{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}' 2>/dev/null || true)
tmp="$(mktemp)"
trap 'rm -f "$tmp"' EXIT
# status|name|sev|cpu_lim|mem_lim|swap_lim|cpu_used|mem_used|oom|cid
for c in $(docker ps -aq); do
cid="$(docker inspect -f '{{.Id}}' "$c" | cut -c1-12)"
name="$(docker inspect -f '{{.Name}}' "$c" | sed 's#^/##')"
status="$(docker inspect -f '{{.State.Status}}' "$c")"
oom="$(docker inspect -f '{{.State.OOMKilled}}' "$c")"
mem_b="$(docker inspect -f '{{.HostConfig.Memory}}' "$c")"
swap_b="$(docker inspect -f '{{.HostConfig.MemorySwap}}' "$c")"
mem_mib="$(to_mib "$mem_b")"
swap_mib="$(to_mib "$swap_b")"
mem_lim="$(human_bytes "$mem_b")"
swap_lim="$(human_bytes "$swap_b")"
nanocpus="$(docker inspect -f '{{.HostConfig.NanoCpus}}' "$c")"
if [ -z "$nanocpus" ] || [ "$nanocpus" = "0" ]; then
cpu_lim="unlimited"
else
cpu_lim="$(awk -v n="$nanocpus" 'BEGIN { printf "%.2f", n/1000000000 }')"
fi
cpu_used="${ST_CPU[$name]:--}"
mem_used="${ST_MEM[$name]:--}"
# severity for name
sev="green"
if [ "$oom" = "true" ]; then sev="red"; fi
if [ "$mem_mib" -ge "$MEM_CRIT_MIB" ] || [ "$swap_mib" -ge "$SWAP_CRIT_MIB" ]; then sev="red"; fi
if [ "$sev" != "red" ]; then
if [ "$status" != "running" ]; then sev="yellow"; fi
if [ "$mem_mib" -ge "$MEM_WARN_MIB" ] || [ "$swap_mib" -ge "$SWAP_WARN_MIB" ]; then sev="yellow"; fi
if [ "$cpu_lim" != "unlimited" ]; then
awk -v c="$cpu_lim" -v warn="$CPU_WARN" 'BEGIN{ exit !(c+0 >= warn) }' && sev="yellow"
awk -v c="$cpu_lim" -v crit="$CPU_CRIT" 'BEGIN{ exit !(c+0 >= crit) }' && sev="red"
fi
fi
echo "${status}|${name}|${sev}|${cpu_lim}|${mem_lim}|${swap_lim}|${cpu_used}|${mem_used}|${oom}|${cid}" >> "$tmp"
done
print_section() {
local title="$1"
local filter="$2"
echo
if [ "$title" = "RUNNING" ]; then
printf "${GREEN}===== %s =====${NC}\n" "$title"
else
printf "${RED}===== %s =====${NC}\n" "$title"
fi
# echo "===== ${title} ====="
# Table without colors, aligned by column
{
echo "NAME|CPU_LIM|MEM_LIM|SWAP_LIM|CPU%|MEM_USED|STATUS|OOM|CONTAINER_ID"
awk -F'|' "$filter {print \$0}" "$tmp" | sort -t'|' -k2,2 | \
while IFS='|' read -r status name sev cpu_lim mem_lim swap_lim cpu_used mem_used oom cid; do
name_fixed="$(pad_name "$name")"
echo "${name_fixed}|${cpu_lim}|${mem_lim}|${swap_lim}|${cpu_used}|${mem_used}|${status}|${oom}|${cid}|${sev}"
done
} | column -t -s'|' | \
while IFS= read -r line; do
# colorize NAME only after alignment
# last column is severity, remove it from output
sev="$(echo "$line" | awk '{print $NF}')"
line_no_sev="${line% *}"
name_field="$(echo "$line_no_sev" | cut -d' ' -f1)"
rest="${line_no_sev#"$name_field"}"
if [ "$name_field" = "NAME" ]; then
echo "$line_no_sev"
continue
fi
case "$sev" in
red) printf "%b%s\n" "${RED}${name_field}${NC}" "$rest" ;;
yellow) printf "%b%s\n" "${YELLOW}${name_field}${NC}" "$rest" ;;
*) printf "%b%s\n" "${GREEN}${name_field}${NC}" "$rest" ;;
esac
done
}
print_section "RUNNING" '$1=="running"'
print_section "NOT RUNNING" '$1!="running"'
| 1 | #!/bin/bash |
| 2 | set -euo pipefail |
| 3 | |
| 4 | MEM_WARN_MIB=1024 |
| 5 | MEM_CRIT_MIB=4096 |
| 6 | SWAP_WARN_MIB=2048 |
| 7 | SWAP_CRIT_MIB=8192 |
| 8 | CPU_WARN=1.0 |
| 9 | CPU_CRIT=2.0 |
| 10 | |
| 11 | W_NAME_VAL=40 |
| 12 | |
| 13 | RED="\033[0;31m" |
| 14 | YELLOW="\033[0;33m" |
| 15 | GREEN="\033[0;32m" |
| 16 | BLUE="\033[0;34m" |
| 17 | NC="\033[0m" |
| 18 | |
| 19 | to_mib() { echo $(( (${1:-0}) / 1024 / 1024 )); } |
| 20 | |
| 21 | human_bytes() { |
| 22 | local b="${1:-0}" |
| 23 | if [ -z "$b" ] || [ "$b" = "0" ]; then echo "unlimited"; return; fi |
| 24 | local mib=$((b / 1024 / 1024)) |
| 25 | if [ "$mib" -ge 1024 ]; then echo "$((mib/1024))GiB"; else echo "${mib}MiB"; fi |
| 26 | } |
| 27 | |
| 28 | pad_name() { |
| 29 | # fixed width name (NO COLORS) |
| 30 | printf "%-${W_NAME_VAL}.${W_NAME_VAL}s" "$1" |
| 31 | } |
| 32 | |
| 33 | declare -A ST_CPU |
| 34 | declare -A ST_MEM |
| 35 | while IFS=$'\t' read -r name cpu mem; do |
| 36 | name="$(echo "$name" | xargs)" |
| 37 | ST_CPU["$name"]="$(echo "$cpu" | xargs)" |
| 38 | ST_MEM["$name"]="$(echo "$mem" | xargs)" |
| 39 | done < <(docker stats --no-stream --format '{{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}' 2>/dev/null || true) |
| 40 | |
| 41 | tmp="$(mktemp)" |
| 42 | trap 'rm -f "$tmp"' EXIT |
| 43 | |
| 44 | # status|name|sev|cpu_lim|mem_lim|swap_lim|cpu_used|mem_used|oom|cid |
| 45 | for c in $(docker ps -aq); do |
| 46 | cid="$(docker inspect -f '{{.Id}}' "$c" | cut -c1-12)" |
| 47 | name="$(docker inspect -f '{{.Name}}' "$c" | sed 's#^/##')" |
| 48 | status="$(docker inspect -f '{{.State.Status}}' "$c")" |
| 49 | oom="$(docker inspect -f '{{.State.OOMKilled}}' "$c")" |
| 50 | |
| 51 | mem_b="$(docker inspect -f '{{.HostConfig.Memory}}' "$c")" |
| 52 | swap_b="$(docker inspect -f '{{.HostConfig.MemorySwap}}' "$c")" |
| 53 | mem_mib="$(to_mib "$mem_b")" |
| 54 | swap_mib="$(to_mib "$swap_b")" |
| 55 | |
| 56 | mem_lim="$(human_bytes "$mem_b")" |
| 57 | swap_lim="$(human_bytes "$swap_b")" |
| 58 | |
| 59 | nanocpus="$(docker inspect -f '{{.HostConfig.NanoCpus}}' "$c")" |
| 60 | if [ -z "$nanocpus" ] || [ "$nanocpus" = "0" ]; then |
| 61 | cpu_lim="unlimited" |
| 62 | else |
| 63 | cpu_lim="$(awk -v n="$nanocpus" 'BEGIN { printf "%.2f", n/1000000000 }')" |
| 64 | fi |
| 65 | |
| 66 | cpu_used="${ST_CPU[$name]:--}" |
| 67 | mem_used="${ST_MEM[$name]:--}" |
| 68 | |
| 69 | # severity for name |
| 70 | sev="green" |
| 71 | if [ "$oom" = "true" ]; then sev="red"; fi |
| 72 | if [ "$mem_mib" -ge "$MEM_CRIT_MIB" ] || [ "$swap_mib" -ge "$SWAP_CRIT_MIB" ]; then sev="red"; fi |
| 73 | |
| 74 | if [ "$sev" != "red" ]; then |
| 75 | if [ "$status" != "running" ]; then sev="yellow"; fi |
| 76 | if [ "$mem_mib" -ge "$MEM_WARN_MIB" ] || [ "$swap_mib" -ge "$SWAP_WARN_MIB" ]; then sev="yellow"; fi |
| 77 | if [ "$cpu_lim" != "unlimited" ]; then |
| 78 | awk -v c="$cpu_lim" -v warn="$CPU_WARN" 'BEGIN{ exit !(c+0 >= warn) }' && sev="yellow" |
| 79 | awk -v c="$cpu_lim" -v crit="$CPU_CRIT" 'BEGIN{ exit !(c+0 >= crit) }' && sev="red" |
| 80 | fi |
| 81 | fi |
| 82 | |
| 83 | echo "${status}|${name}|${sev}|${cpu_lim}|${mem_lim}|${swap_lim}|${cpu_used}|${mem_used}|${oom}|${cid}" >> "$tmp" |
| 84 | done |
| 85 | |
| 86 | print_section() { |
| 87 | local title="$1" |
| 88 | local filter="$2" |
| 89 | |
| 90 | echo |
| 91 | if [ "$title" = "RUNNING" ]; then |
| 92 | printf "${GREEN}===== %s =====${NC}\n" "$title" |
| 93 | else |
| 94 | printf "${RED}===== %s =====${NC}\n" "$title" |
| 95 | fi |
| 96 | |
| 97 | # echo "===== ${title} =====" |
| 98 | |
| 99 | # Table without colors, aligned by column |
| 100 | { |
| 101 | echo "NAME|CPU_LIM|MEM_LIM|SWAP_LIM|CPU%|MEM_USED|STATUS|OOM|CONTAINER_ID" |
| 102 | |
| 103 | awk -F'|' "$filter {print \$0}" "$tmp" | sort -t'|' -k2,2 | \ |
| 104 | while IFS='|' read -r status name sev cpu_lim mem_lim swap_lim cpu_used mem_used oom cid; do |
| 105 | name_fixed="$(pad_name "$name")" |
| 106 | echo "${name_fixed}|${cpu_lim}|${mem_lim}|${swap_lim}|${cpu_used}|${mem_used}|${status}|${oom}|${cid}|${sev}" |
| 107 | done |
| 108 | } | column -t -s'|' | \ |
| 109 | while IFS= read -r line; do |
| 110 | # colorize NAME only after alignment |
| 111 | # last column is severity, remove it from output |
| 112 | sev="$(echo "$line" | awk '{print $NF}')" |
| 113 | line_no_sev="${line% *}" |
| 114 | |
| 115 | name_field="$(echo "$line_no_sev" | cut -d' ' -f1)" |
| 116 | rest="${line_no_sev#"$name_field"}" |
| 117 | |
| 118 | if [ "$name_field" = "NAME" ]; then |
| 119 | echo "$line_no_sev" |
| 120 | continue |
| 121 | fi |
| 122 | |
| 123 | case "$sev" in |
| 124 | red) printf "%b%s\n" "${RED}${name_field}${NC}" "$rest" ;; |
| 125 | yellow) printf "%b%s\n" "${YELLOW}${name_field}${NC}" "$rest" ;; |
| 126 | *) printf "%b%s\n" "${GREEN}${name_field}${NC}" "$rest" ;; |
| 127 | esac |
| 128 | done |
| 129 | } |
| 130 | |
| 131 | |
| 132 | print_section "RUNNING" '$1=="running"' |
| 133 | print_section "NOT RUNNING" '$1!="running"' |
| 134 |
docker_compose_config_meme_cpu.md
· 4.8 KiB · Markdown
Ham
# Script check Docekr Mem cpu
Bash file monitor --> docker_check_cpu_mem.sh (chmod +x)
# ✅ Audit Services Docker (CPU / RAM / Swap)
> Objectif : limiter les pics RAM, éviter OOM, et garder des services réactifs.
> Format conseillé dans docker-compose (compose classique) :
> - `cpus: "X.Y"`
> - `mem_limit: XXXm|Xg`
> - `memswap_limit: XXXm|Xg`
---
## ✅ goaccess
- **Status** : Up ✅
- **CPU** : `cpus: "0.5"`
- **RAM** : `mem_limit: 768m`
- **SWAP** : `memswap_limit: 1536m`
- **Remarque** : parsing logs => pics possibles.
---
## ⚠️ pulse
- **Status** : Exited ❌
- **CPU** : `cpus: "0.5"`
- **RAM** : `mem_limit: 1g` *(ou 2g si beaucoup de hosts)*
- **SWAP** : `memswap_limit: 2g` *(ou 4g)*
- **Remarque** : sans `/var/run/docker.sock` => pas de monitoring Docker local.
---
## ⚠️ photoprism
- **Status** : Exited ❌
- **CPU** : `cpus: "2.0"`
- **RAM** : `mem_limit: 2g`
- **SWAP** : `memswap_limit: 4g`
- **Remarque** : indexation/photo => très gourmand.
---
## ✅ big-bear-adguard-home-host
- **Status** : Up ✅
- **CPU** : `cpus: "0.25"`
- **RAM** : `mem_limit: 256m`
- **SWAP** : `memswap_limit: 512m`
- **Remarque** : service léger.
---
## ✅ syncthing
- **Status** : Up ✅ (healthy)
- **CPU** : `cpus: "1.0"`
- **RAM** : `mem_limit: 512m`
- **SWAP** : `memswap_limit: 1g`
- **Remarque** : pics possibles selon volume fichiers.
---
## ⚠️ n8n
- **Status** : Created (pas lancé) ⚠️
- **CPU** : `cpus: "1.0"`
- **RAM** : `mem_limit: 1g`
- **SWAP** : `memswap_limit: 2g`
- **Remarque** : workflows + exec => pics.
---
## ✅ big-bear-filebrowser
- **Status** : Up ✅ (healthy)
- **CPU** : `cpus: "0.25"`
- **RAM** : `mem_limit: 256m`
- **SWAP** : `memswap_limit: 512m`
- **Remarque** : léger.
---
## ⚠️ big-bear-stirling-pdf
- **Status** : Exited ❌
- **CPU** : `cpus: "1.0"`
- **RAM** : `mem_limit: 1g`
- **SWAP** : `memswap_limit: 2g`
- **Remarque** : Java => peut monter.
---
## ✅ mariadb
- **Status** : Up ✅
- **CPU** : `cpus: "1.0"`
- **RAM** : `mem_limit: 1g`
- **SWAP** : `memswap_limit: 2g`
- **Remarque** : le plus important à limiter proprement.
---
## ⚠️ big-bear-ghost
- **Status** : Exited ❌
- **CPU** : `cpus: "0.5"`
- **RAM** : `mem_limit: 512m`
- **SWAP** : `memswap_limit: 1g`
- **Remarque** : OK, mais dépend trafic.
---
## ⚠️ big-bear-ghost-db (mysql:8)
- **Status** : Exited ❌
- **CPU** : `cpus: "1.0"`
- **RAM** : `mem_limit: 1g`
- **SWAP** : `memswap_limit: 2g`
- **Remarque** : si tu utilises déjà mariadb ailleurs, évite 2 DB.
---
## ✅ big-bear-erugo
- **Status** : Up ✅
- **CPU** : `cpus: "0.5"`
- **RAM** : `mem_limit: 512m`
- **SWAP** : `memswap_limit: 1g`
- **Remarque** : usage moyen.
---
## ✅ dozzle-agent
- **Status** : Up ✅
- **CPU** : `cpus: "0.25"`
- **RAM** : `mem_limit: 128m`
- **SWAP** : `memswap_limit: 256m`
- **Remarque** : léger.
---
## ✅ dozzle
- **Status** : Up ✅
- **CPU** : `cpus: "0.25"`
- **RAM** : `mem_limit: 128m`
- **SWAP** : `memswap_limit: 256m`
- **Remarque** : léger.
---
## ✅ portainer_agent
- **Status** : Up ✅
- **CPU** : `cpus: "0.25"`
- **RAM** : `mem_limit: 128m`
- **SWAP** : `memswap_limit: 256m`
---
## ✅ portainer
- **Status** : Up ✅
- **CPU** : `cpus: "0.5"`
- **RAM** : `mem_limit: 256m`
- **SWAP** : `memswap_limit: 512m`
---
## ✅ lagident
- **Status** : Up ✅
- **CPU** : `cpus: "0.25"`
- **RAM** : `mem_limit: 128m`
- **SWAP** : `memswap_limit: 256m`
---
## ✅ big-bear-glances
- **Status** : Up ✅
- **CPU** : `cpus: "0.25"`
- **RAM** : `mem_limit: 256m`
- **SWAP** : `memswap_limit: 512m`
---
## ✅ excalidraw
- **Status** : Up ✅ (healthy)
- **CPU** : `cpus: "0.25"`
- **RAM** : `mem_limit: 256m`
- **SWAP** : `memswap_limit: 512m`
---
## ⚠️ big-bear-composetoolbox
- **Status** : Exited ❌
- **CPU** : `cpus: "0.25"`
- **RAM** : `mem_limit: 256m`
- **SWAP** : `memswap_limit: 512m`
---
## ⚠️ big-bear-watchyourlan
- **Status** : Exited ❌
- **CPU** : `cpus: "0.25"`
- **RAM** : `mem_limit: 256m`
- **SWAP** : `memswap_limit: 512m`
- **Remarque** : s’arrête souvent si pas de privilèges réseau.
---
## ✅ memos
- **Status** : Up ✅
- **CPU** : `cpus: "0.25"`
- **RAM** : `mem_limit: 256m`
- **SWAP** : `memswap_limit: 512m`
---
## ⚠️ ttydbridge
- **Status** : Exited ❌
- **CPU** : `cpus: "0.25"`
- **RAM** : `mem_limit: 128m`
- **SWAP** : `memswap_limit: 256m`
---
## ✅ openspeedtest
- **Status** : Up ✅
- **CPU** : `cpus: "0.25"`
- **RAM** : `mem_limit: 128m`
- **SWAP** : `memswap_limit: 256m`
---
## ⚠️ big-bear-brave
- **Status** : Exited ❌
- **CPU** : `cpus: "1.0"`
- **RAM** : `mem_limit: 1g`
- **SWAP** : `memswap_limit: 2g`
- **Remarque** : container navigateur = lourd.
---
## ⚠️ tailscale
- **Status** : Exited ❌
- **CPU** : `cpus: "0.25"`
- **RAM** : `mem_limit: 128m`
- **SWAP** : `memswap_limit: 256m`
- **Remarque** : souvent besoin `--cap-add=NET_ADMIN` ou mode host.
---
Script check Docekr Mem cpu
Bash file monitor --> docker_check_cpu_mem.sh (chmod +x)
✅ Audit Services Docker (CPU / RAM / Swap)
Objectif : limiter les pics RAM, éviter OOM, et garder des services réactifs. Format conseillé dans docker-compose (compose classique) :
cpus: "X.Y"mem_limit: XXXm|Xgmemswap_limit: XXXm|Xg
✅ goaccess
- Status : Up ✅
- CPU :
cpus: "0.5" - RAM :
mem_limit: 768m - SWAP :
memswap_limit: 1536m - Remarque : parsing logs => pics possibles.
⚠️ pulse
- Status : Exited ❌
- CPU :
cpus: "0.5" - RAM :
mem_limit: 1g(ou 2g si beaucoup de hosts) - SWAP :
memswap_limit: 2g(ou 4g) - Remarque : sans
/var/run/docker.sock=> pas de monitoring Docker local.
⚠️ photoprism
- Status : Exited ❌
- CPU :
cpus: "2.0" - RAM :
mem_limit: 2g - SWAP :
memswap_limit: 4g - Remarque : indexation/photo => très gourmand.
✅ big-bear-adguard-home-host
- Status : Up ✅
- CPU :
cpus: "0.25" - RAM :
mem_limit: 256m - SWAP :
memswap_limit: 512m - Remarque : service léger.
✅ syncthing
- Status : Up ✅ (healthy)
- CPU :
cpus: "1.0" - RAM :
mem_limit: 512m - SWAP :
memswap_limit: 1g - Remarque : pics possibles selon volume fichiers.
⚠️ n8n
- Status : Created (pas lancé) ⚠️
- CPU :
cpus: "1.0" - RAM :
mem_limit: 1g - SWAP :
memswap_limit: 2g - Remarque : workflows + exec => pics.
✅ big-bear-filebrowser
- Status : Up ✅ (healthy)
- CPU :
cpus: "0.25" - RAM :
mem_limit: 256m - SWAP :
memswap_limit: 512m - Remarque : léger.
⚠️ big-bear-stirling-pdf
- Status : Exited ❌
- CPU :
cpus: "1.0" - RAM :
mem_limit: 1g - SWAP :
memswap_limit: 2g - Remarque : Java => peut monter.
✅ mariadb
- Status : Up ✅
- CPU :
cpus: "1.0" - RAM :
mem_limit: 1g - SWAP :
memswap_limit: 2g - Remarque : le plus important à limiter proprement.
⚠️ big-bear-ghost
- Status : Exited ❌
- CPU :
cpus: "0.5" - RAM :
mem_limit: 512m - SWAP :
memswap_limit: 1g - Remarque : OK, mais dépend trafic.
⚠️ big-bear-ghost-db (mysql:8)
- Status : Exited ❌
- CPU :
cpus: "1.0" - RAM :
mem_limit: 1g - SWAP :
memswap_limit: 2g - Remarque : si tu utilises déjà mariadb ailleurs, évite 2 DB.
✅ big-bear-erugo
- Status : Up ✅
- CPU :
cpus: "0.5" - RAM :
mem_limit: 512m - SWAP :
memswap_limit: 1g - Remarque : usage moyen.
✅ dozzle-agent
- Status : Up ✅
- CPU :
cpus: "0.25" - RAM :
mem_limit: 128m - SWAP :
memswap_limit: 256m - Remarque : léger.
✅ dozzle
- Status : Up ✅
- CPU :
cpus: "0.25" - RAM :
mem_limit: 128m - SWAP :
memswap_limit: 256m - Remarque : léger.
✅ portainer_agent
- Status : Up ✅
- CPU :
cpus: "0.25" - RAM :
mem_limit: 128m - SWAP :
memswap_limit: 256m
✅ portainer
- Status : Up ✅
- CPU :
cpus: "0.5" - RAM :
mem_limit: 256m - SWAP :
memswap_limit: 512m
✅ lagident
- Status : Up ✅
- CPU :
cpus: "0.25" - RAM :
mem_limit: 128m - SWAP :
memswap_limit: 256m
✅ big-bear-glances
- Status : Up ✅
- CPU :
cpus: "0.25" - RAM :
mem_limit: 256m - SWAP :
memswap_limit: 512m
✅ excalidraw
- Status : Up ✅ (healthy)
- CPU :
cpus: "0.25" - RAM :
mem_limit: 256m - SWAP :
memswap_limit: 512m
⚠️ big-bear-composetoolbox
- Status : Exited ❌
- CPU :
cpus: "0.25" - RAM :
mem_limit: 256m - SWAP :
memswap_limit: 512m
⚠️ big-bear-watchyourlan
- Status : Exited ❌
- CPU :
cpus: "0.25" - RAM :
mem_limit: 256m - SWAP :
memswap_limit: 512m - Remarque : s’arrête souvent si pas de privilèges réseau.
✅ memos
- Status : Up ✅
- CPU :
cpus: "0.25" - RAM :
mem_limit: 256m - SWAP :
memswap_limit: 512m
⚠️ ttydbridge
- Status : Exited ❌
- CPU :
cpus: "0.25" - RAM :
mem_limit: 128m - SWAP :
memswap_limit: 256m
✅ openspeedtest
- Status : Up ✅
- CPU :
cpus: "0.25" - RAM :
mem_limit: 128m - SWAP :
memswap_limit: 256m
⚠️ big-bear-brave
- Status : Exited ❌
- CPU :
cpus: "1.0" - RAM :
mem_limit: 1g - SWAP :
memswap_limit: 2g - Remarque : container navigateur = lourd.
⚠️ tailscale
- Status : Exited ❌
- CPU :
cpus: "0.25" - RAM :
mem_limit: 128m - SWAP :
memswap_limit: 256m - Remarque : souvent besoin
--cap-add=NET_ADMINou mode host.