Proxmox 7: включение Docker и Podman в LXC

Для запуска 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 177
Поделиться
Отправить
1 комментарий
Mike 3 ч

В продолжение темы.
Поднимал PiGallery2 (см. https://bpatrik.github.io/pigallery2/setup/docker/)
Матрёшка: Proxmox LXC -> Podman
Ловлю при старте:
Error: unable to start container «c4e5361df7d0d6f6082961f203824a877991b90241d9092067b4bc2964ba08ab»: setting up Pasta: pasta failed with exit code 1: 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»