Деплой: как включить memory cgroup на Pi, иначе mem_limit не действует
На Pi при каждом `docker compose up` контейнеры пишут «Your kernel does not support memory limit capabilities…». Причина — прошивка Raspberry Pi добавляет ядру cgroup_disable=memory: контроллера memory нет, и Docker молча игнорирует mem_limit (app 512m, tunnel 64m, backup 384m). deploy/pi/README.md: проверка, дописывание cgroup_enable=memory в cmdline.txt с бэкапом, перезагрузка и контроль; строка в «Если что-то не так». Пояснения у mem_limit в compose и в .env.example. #67 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LqSoRj99iwVEH5U5fnZgsd
This commit is contained in:
@@ -35,6 +35,32 @@ newgrp docker # применить группу
|
||||
docker version && docker compose version # проверка
|
||||
```
|
||||
|
||||
### Лимиты памяти (memory cgroup)
|
||||
Прошивка Raspberry Pi сама добавляет ядру `cgroup_disable=memory`. Без контроллера `memory`
|
||||
Docker **молча игнорирует** `mem_limit` из `docker-compose.yml` (app 512m, tunnel 64m, backup
|
||||
384m) и на каждый контейнер пишет «Your kernel does not support memory limit capabilities or
|
||||
the cgroup is not mounted. Limitation discarded.». Тогда утечка или тяжёлый бэкап могут
|
||||
занять всю RAM Pi, и OOM-killer прибьёт что попало.
|
||||
|
||||
Проверка — если есть вывод, лимиты не работают:
|
||||
```bash
|
||||
docker info 2>&1 | grep -i "no memory limit"
|
||||
cat /sys/fs/cgroup/cgroup.controllers # в списке должно быть слово memory
|
||||
```
|
||||
Включить — дописать параметр **в ту же единственную строку** `cmdline.txt` (перевод строки
|
||||
в этом файле ломает загрузку) и перезагрузить Pi. Прод на время перезагрузки недоступен,
|
||||
контейнеры поднимутся сами:
|
||||
```bash
|
||||
sudo cp /boot/firmware/cmdline.txt /boot/firmware/cmdline.txt.bak
|
||||
grep -q "cgroup_enable=memory" /boot/firmware/cmdline.txt || \
|
||||
sudo sed -i '1 s/$/ cgroup_enable=memory/' /boot/firmware/cmdline.txt
|
||||
cat /boot/firmware/cmdline.txt # одна строка, в конце cgroup_enable=memory
|
||||
sudo reboot
|
||||
```
|
||||
После перезагрузки `cgroup.controllers` содержит `memory`, а `docker info` не пишет
|
||||
`No memory limit support`. Если Pi не загрузился, верните бэкап: вставьте карту в ПК и на
|
||||
разделе `bootfs` замените `cmdline.txt` содержимым `cmdline.txt.bak`.
|
||||
|
||||
## 2. SSH-ключ для туннеля
|
||||
**Что это.** Отдельная пара ключей **только для туннеля** — ею контейнер `tunnel` логинится на
|
||||
`tunnel@VPS`, чтобы открыть `ssh -R`. Это не системный ключ Pi, ты создаёшь его сам. Распределение:
|
||||
@@ -145,3 +171,6 @@ docker compose exec backup fs-backup list # хронология снимк
|
||||
слот 9000 → на VPS `sudo fuser -k 9000/tcp`, затем `docker compose restart tunnel`).
|
||||
- `pull` не проходит → проверь `docker login gitea.arseniev.info` и что реестр по HTTPS с валидным
|
||||
сертификатом (иначе хост в `/etc/docker/daemon.json` → `insecure-registries`, `systemctl restart docker`).
|
||||
- `docker compose up` пишет «Your kernel does not support memory limit capabilities…
|
||||
Limitation discarded.» → лимиты памяти не работают: включите memory cgroup, раздел 1,
|
||||
«Лимиты памяти».
|
||||
|
||||
Reference in New Issue
Block a user