Создание 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.
Безопасный порядок создания
- Загрузить официальный шаблон.
- Создать unprivileged-контейнер.
- Выделить минимально достаточные ресурсы.
- Настроить сеть.
- Запустить и проверить консоль.
- Обновить пакеты.
- Настроить SSH.
- Проверить автозапуск.
- Создать резервную копию перед установкой приложения.
Быстрый набор команд
Показать контейнеры:
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.