Создание LXC-контейнера в Proxmox VE

Пошаговое создание LXC-контейнера в Proxmox VE: загрузка шаблона, настройка ресурсов, сети, DNS и первый запуск.

LXC-контейнеры используют ядро хоста Proxmox VE и требуют меньше ресурсов, чем полноценные виртуальные машины. Они подходят для Linux-сервисов, которым не нужна отдельная гостевая ОС со своим ядром.

В этой инструкции рассматривается только создание одного LXC-контейнера, его базовая настройка и первый запуск.

Подходит для: Proxmox VE 8 и 9
Уровень сложности: начальный
Время выполнения: около 15 минут
Требуемый доступ: учётная запись с правами на создание контейнеров

Что потребуется

Перед началом подготовьте:

  • установленный Proxmox VE;
  • доступ к веб-интерфейсу;
  • хранилище с поддержкой Container Template;
  • свободное место;
  • свободный CT ID;
  • подключённый сетевой bridge;
  • шаблон Linux-дистрибутива.

Что будет создано

После выполнения инструкции будет:

  • загружен LXC-шаблон;
  • создан контейнер;
  • настроены CPU, RAM и диск;
  • настроена сеть;
  • выполнен первый запуск;
  • проверено подключение к контейнеру;
  • включён автозапуск при необходимости.

Что такое LXC в Proxmox VE

LXC-контейнер — это изолированная Linux-среда, которая использует ядро узла Proxmox.

Основные особенности:

  • меньше расход RAM и диска;
  • быстрый запуск;
  • высокая плотность размещения;
  • только Linux-гостевые системы;
  • общее ядро с хостом;
  • некоторые функции требуют дополнительных разрешений.

LXC не является полной заменой виртуальной машине.

Когда использовать контейнер

LXC подходит для:

  • веб-сервисов;
  • reverse proxy;
  • DNS;
  • monitoring agent;
  • небольших баз данных;
  • Git-сервисов;
  • VPN-сервисов;
  • лабораторных окружений.

Когда лучше выбрать VM

Полноценная VM предпочтительнее, если требуется:

  • Windows;
  • собственное ядро;
  • нестандартные kernel-модули;
  • максимальная изоляция;
  • Nested Virtualization;
  • сложный Docker-in-LXC;
  • особые требования безопасности.

Загрузка шаблона контейнера

В веб-интерфейсе выберите узел Proxmox.

Откройте хранилище:

local

Перейдите:

CT Templates

Нажмите:

Templates

Выберите нужный шаблон, например:

ubuntu-24.04-standard

Нажмите:

Download

Дождитесь завершения загрузки.

Проверка шаблонов через CLI

Обновить список доступных шаблонов:

pveam update

Показать доступные шаблоны:

pveam available

Найти Ubuntu 24.04:

pveam available |
grep ubuntu-24.04

Показать загруженные шаблоны:

pveam list local

Загрузка шаблона через CLI

Пример:

pveam download   local   ubuntu-24.04-standard_24.04-2_amd64.tar.zst

Имя шаблона может измениться. Используйте точное значение из:

pveam available

Запуск мастера создания контейнера

В правом верхнем углу нажмите:

Create CT

Откроется мастер создания LXC-контейнера.

Вкладка General

Node

Выберите узел Proxmox.

CT ID

Укажите свободный идентификатор.

Пример:

200

CT ID должен быть уникальным в пределах кластера.

Hostname

Пример:

web-lxc

Лучше использовать:

  • латинские буквы;
  • цифры;
  • дефисы;
  • короткое понятное имя.

Unprivileged container

Оставьте включённым:

Unprivileged container

Непривилегированный контейнер безопаснее, потому что root внутри контейнера не является root на хосте.

Привилегированный контейнер используйте только при конкретной технической необходимости.

Password

Задайте временный сложный пароль root.

Даже если планируется вход по SSH-ключу, пароль может потребоваться для первого входа через консоль.

SSH public key

Добавьте публичный SSH-ключ.

Пример:

ssh-ed25519 AAAA... admin@example

Вкладка Template

Выберите:

  • хранилище;
  • загруженный шаблон;
  • нужный Linux-дистрибутив.

Пример:

Storage: local
Template: ubuntu-24.04-standard

Вкладка Disks

Storage

Выберите хранилище:

local-lvm

или другое доступное.

Disk size

Для небольшого контейнера можно начать с:

8 GiB

Для сервиса с логами и данными лучше выделить:

16–32 GiB

Размер зависит от назначения контейнера.

Вкладка CPU

Cores

Для лёгкого сервиса:

1

Для обычного небольшого приложения:

2

Не выделяйте контейнеру все ядра узла без необходимости.

CPU units

Этот параметр задаёт относительный приоритет CPU.

Для базовой настройки можно оставить значение по умолчанию.

Вкладка Memory

Memory

Для простого сервиса:

512 MiB

Для более тяжёлого приложения:

1024–2048 MiB

Swap

Пример:

512 MiB

Swap внутри LXC управляется ограничениями контейнера, а не отдельным swap-файлом внутри гостя.

Вкладка Network

Name

Обычно:

eth0

Bridge

Выберите:

vmbr0

IPv4

Для DHCP:

DHCP

Для статического адреса:

Static

Пример:

192.0.2.30/24

Gateway

Пример:

192.0.2.1

Используйте параметры своей сети.

VLAN Tag

Укажите только при использовании VLAN.

Пример:

100

Firewall

Включает поддержку Proxmox Firewall для интерфейса.

Сам по себе флажок не создаёт разрешающие или запрещающие правила.

Вкладка DNS

Можно использовать настройки хоста:

Use host settings

Либо указать вручную:

DNS domain: example.com
DNS servers: 192.0.2.53

Для большинства случаев достаточно настроек хоста.

Вкладка Confirm

Проверьте:

  • CT ID;
  • hostname;
  • шаблон;
  • диск;
  • CPU;
  • RAM;
  • сеть;
  • DNS;
  • режим unprivileged.

При необходимости включите:

Start after created

Нажмите:

Finish

Первый запуск

Выберите контейнер.

Нажмите:

Start

Откройте:

Console

Войдите под пользователем:

root

с заданным паролем.

Проверка операционной системы

cat /etc/os-release

Проверьте hostname:

hostnamectl

Проверьте ядро:

uname -a

Контейнер будет использовать ядро узла Proxmox.

Проверка сети

ip addr

Проверьте маршрут:

ip route

Проверьте шлюз:

ping -c 3 192.0.2.1

Проверьте доступ в интернет:

ping -c 3 1.1.1.1

Проверьте DNS:

getent hosts example.com

Обновление пакетов

Для Ubuntu или Debian:

apt update
apt upgrade -y

При необходимости установите SSH server:

apt install -y openssh-server

Включите:

systemctl enable --now ssh

Проверьте:

systemctl status ssh --no-pager

Подключение по SSH

С другой машины:

ssh root@CONTAINER_IP

Если используется отдельный пользователь:

ssh ADMIN_USER@CONTAINER_IP

После первого входа рекомендуется создать отдельного администратора и ограничить root-доступ.

Проверка контейнера через CLI

На узле Proxmox:

pct list

Показать статус:

pct status CT_ID

Пример:

pct status 200

Показать конфигурацию:

pct config 200

Запуск и остановка через CLI

Запуск:

pct start CT_ID

Корректное завершение:

pct shutdown CT_ID

Принудительная остановка:

pct stop CT_ID

Принудительную остановку используйте только при зависании.

Вход в контейнер с узла

Без SSH:

pct enter CT_ID

Пример:

pct enter 200

Для выхода:

exit

Выполнение одной команды

pct exec CT_ID -- hostname

Пример:

pct exec 200 -- ip addr

Включение автозапуска

В веб-интерфейсе:

CT → Options → Start at boot

Установите:

Yes

Через CLI:

pct set CT_ID   --onboot 1

Проверьте:

pct config CT_ID |
grep onboot

Порядок запуска

Для контейнеров, зависящих от других сервисов, можно настроить:

  • Startup order;
  • Startup delay;
  • Shutdown timeout.

В веб-интерфейсе:

Options → Start/Shutdown order

Через CLI:

pct set CT_ID   --startup order=20,up=30,down=60

Изменение CPU и RAM

Остановите контейнер при необходимости:

pct shutdown CT_ID

Измените CPU:

pct set CT_ID   --cores 2

Измените память:

pct set CT_ID   --memory 2048   --swap 512

Запустите:

pct start CT_ID

Увеличение диска

Проверьте конфигурацию:

pct config CT_ID |
grep rootfs

Увеличьте диск на 10 ГБ:

pct resize CT_ID rootfs +10G

Проверьте внутри контейнера:

df -h /

Уменьшение rootfs стандартными средствами Proxmox обычно не выполняется.

Настройка статического IP через CLI

pct set CT_ID   --net0 name=eth0,bridge=vmbr0,ip=192.0.2.30/24,gw=192.0.2.1,type=veth

Для DHCP:

pct set CT_ID   --net0 name=eth0,bridge=vmbr0,ip=dhcp,type=veth

Проверьте:

pct config CT_ID |
grep net0

Nesting

Некоторым приложениям внутри LXC требуется:

Nesting

В веб-интерфейсе:

Options → Features

Через CLI:

pct set CT_ID   --features nesting=1

Не включайте дополнительные features без необходимости.

Docker внутри LXC

Docker можно запускать внутри LXC, но такой сценарий требует дополнительных настроек и имеет ограничения.

Для простого и предсказуемого production-развёртывания часто лучше использовать отдельную VM.

Не включайте privileged mode и nesting только ради Docker без оценки рисков.

Привилегированный и непривилегированный контейнер

Unprivileged

  • безопаснее;
  • root внутри отображается в непривилегированный UID на хосте;
  • подходит для большинства сервисов;
  • может требовать настройки UID/GID для bind mount.

Privileged

  • проще для некоторых legacy-сценариев;
  • root внутри ближе к root хоста;
  • выше риск безопасности;
  • использовать только при обоснованной необходимости.

Типичные проблемы

Контейнер не запускается

Проверьте задачу в веб-интерфейсе.

Через CLI:

pct start CT_ID

Проверьте журнал:

journalctl -u pve-container@CT_ID   -n 100   --no-pager

Нет сети

Проверьте:

pct config CT_ID |
grep net0

На узле:

ip addr show vmbr0

В контейнере:

ip addr
ip route

Проверьте VLAN, bridge, DHCP и gateway.

SSH не работает

Проверьте внутри контейнера:

systemctl status ssh --no-pager
ss -lntp |
grep ':22'

Проверьте firewall и сетевую доступность.

Не работает systemd

Используйте официальный шаблон, предназначенный для LXC.

Проверьте:

ps -p 1 -o comm=

Ожидается:

systemd

Нет доступа к bind mount

Для unprivileged LXC проблема часто связана с UID/GID mapping.

Bind mount и проброс каталогов лучше рассматривать отдельно.

Приложение требует kernel-модуль

LXC использует ядро хоста и не может загружать собственное ядро.

Установите модуль на хосте либо используйте VM.

Безопасный порядок создания

  1. Загрузить официальный шаблон.
  2. Создать unprivileged-контейнер.
  3. Выделить минимально достаточные ресурсы.
  4. Настроить сеть.
  5. Запустить и проверить консоль.
  6. Обновить пакеты.
  7. Настроить SSH.
  8. Проверить автозапуск.
  9. Создать резервную копию перед установкой приложения.

Быстрый набор команд

Показать контейнеры:

pct list

Показать конфигурацию:

pct config CT_ID

Запустить:

pct start CT_ID

Остановить:

pct shutdown CT_ID

Войти:

pct enter CT_ID

Выполнить команду:

pct exec CT_ID -- ip addr

Итог

После выполнения инструкции:

  • загружен LXC-шаблон;
  • создан непривилегированный контейнер;
  • настроены CPU, RAM, диск и сеть;
  • выполнен первый запуск;
  • настроен SSH;
  • проверено управление через pct;
  • включён автозапуск при необходимости.

LXC-контейнеры подходят для лёгких Linux-сервисов, но для максимальной изоляции и нестандартных требований лучше использовать полноценную VM.

← Предыдущая статья Создание шаблона Cloud-Init в Proxmox VE Следующая статья → Резервное копирование LXC-контейнера в Proxmox VE