Для запуска Docker или Podman внутри LXC-контейнера необходимо активировать дополнительные возможности: nesting, keyctl и fuse.
Скрипт запрашивает ID контейнера, проверяет наличие конфигурации, создаёт резервную копию с меткой времени и включает необходимые параметры. Остальные настройки features сохраняются.
Запускать от root на хосте Proxmox.
#!/bin/bash
read -rp "Введите ID контейнера (CTID): " CTID
if [[ ! "$CTID" =~ ^[0-9]+$ || ! -f "/etc/pve/lxc/${CTID}.conf" ]]; then
echo "Ошибка: некорректный CTID или конфигурация не найдена"
exit 1
fi
CONF="/etc/pve/lxc/${CTID}.conf"
BACKUP_DIR="/root/lxc-config-backups"
mkdir -p "$BACKUP_DIR" &&
cp "$CONF" "$BACKUP_DIR/${CTID}.conf.$(date +%Y%m%d_%H%M%S).bak" &&
pct set "$CTID" --features "$(awk -F, '/^features:/{sub(/^features:[[:space:]]*/, ""); for(i=1;i<=NF;i++) if($i !~ /^(nesting|keyctl|fuse)=/) printf "%s,", $i} END{print "nesting=1,keyctl=1,fuse=1"}' "$CONF")" &&
pct config "$CTID" | grep '^features:'Пример выполнения:
Введите ID контейнера (CTID): 177
features: fuse=1,keyctl=1,nesting=1Резервная копия конфигурации сохраняется в /root/lxc-config-backups/.
После изменения параметров необходимо полностью остановить и запустить контейнер:
pct stop 177 && pct start 177Update:
Ещё одна ошибка:
Failed to open() /dev/net/tun: No such file or directory
Failed to set up tap device in namespaceЧиним:
#!/bin/bash
set -euo pipefail
CTID=178
CONF="/etc/pve/lxc/${CTID}.conf"
BACKUP="${CONF}.$(date +%Y%m%d%H%M%S).bkp"
modprobe tun
test -c /dev/net/tun
cp -a "$CONF" "$BACKUP"
RULES=(
"lxc.cgroup2.devices.allow: c 10:200 rwm"
"lxc.mount.entry: /dev/net/tun dev/net/tun none bind,create=file"
)
for rule in "${RULES[@]}"; do
grep -Fqx -- "$rule" "$CONF" || printf '%s\n' "$rule" >> "$CONF"
done
echo "Backup: $BACKUP"
echo "Configuration:"
grep -E '^lxc\.(cgroup2\.devices\.allow|mount\.entry):' "$CONF"