Заметки ITшника обо всём

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

Update:
Ещё одна ошибка:

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"
Отправить
Поделиться
Твитнуть