Перейти к основному контенту

LXC

LXC

lxc — реализация контейнеров Linux, вошедшая в ядро, начиная с 2.6.29на [[эльбрус/lxc|Эльбрусе]] работает начиная с ядра 4.9.76-elbrus-def-alt1.11.8. Не стоит путать с [[LXD]].

По применению доступно множество материалов, рекомендуется вики [http://xgu.ru/wiki/LXC xgu.ru].

== Заметки на манжетах == Установка:

apt-get install lxc

Проверка:

lxc-checkconfig

Подготовка (единожды):

cd /var/lib/lxc

touch config

tar Jcf metadata.tar.xz config

wget http://ftp.altlinux.org/pub/distributions/ALTLinux/p10/images/cloud/x86_64/alt-p10-rootfs-sysvinit-x86_64.tar.xz

Создание пробного контейнера:

cd /var/lib/lxc

lxc-create -t local -n ''alt-p10-test'' -B dir -- --metadata metadata.tar.xz --fstree ''alt-p10-rootfs-sysvinit-x86_64.tar.xz''

Запуск (по умолчанию понадобится поднятый [[#сеть|lxcbr0]]):

lxc-start -n ''alt-p10-test''

Список:

lxc-ls -f

Подключение:

lxc-attach -n ''alt-p10-test''

Останов (извне; внутри должны работать команды {{cmd|shutdown}}/{{cmd|reboot}}/{{cmd|poweroff}}):

lxc-stop -n ''alt-p10-test''

=== консоль === Вход в консоли:

lxc-console -n ''alt-p10-test''

При диагностике вида lxc-console: alt-p10-test: ../src/lxc/commands.c: lxc_cmd_get_tty_fd: 1200 Bad file descriptor - Denied access to tty разрешите терминалы до (пере)запуска контейнера:

cd /var/lib/lxc

cat >> ''alt-p10-test''/config << EOF

lxc.pty.max = ''16'' lxc.tty.max = 1 EOF

sed -i 's,^#1:234:,1:234:,' ''alt-p10-test''/rootfs/etc/inittab

и задайте пароль root внутри контейнера:

lxc-start -n alt-p10-test

lxc-attach ''alt-p10-test''

passwd root

либо добавьте публичный ssh-ключ в {{path|/root/.ssh/authorized_keys}} контейнера.

Также стоит отключить запуск agetty на ttyS*, чтоб не билось об несуществующее устройство (init: Id "T0" respawning too fast: disabled for 5 minutes):

sed -i 's,^T,#&,' /etc/inittab

=== сеть === ==== пример конфигурации бриджа ==== ''см. тж. [[Настройка сети в KVM#Публичный мост|статью по kvm на мосту]]''

Для [[etcnet|/etc/net]], имени бриджа по умолчанию lxcbr0, домена lxc.local, произвольно взятой сети 172.16.15.0/24 за интерфейсом eth1 с маршрутизатором по умолчанию на 172.16.15.1 и DNS-сервером там же:

mkdir /etc/net/ifaces/lxcbr0/

cd /etc/net/ifaces/lxcbr0/

echo "''172.16.15.2/24''" >> ipv4address

echo "default via ''172.16.15.1''" >> ipv4route

cat >> options << EOF

TYPE=bri HOST=''eth1'' ONBOOT=yes DISABLED=no BOOTPROTO=static BRIDGE_OPTIONS="stp_state 0" EOF

cat >> resolv.conf << EOF

domain lxc.local nameserver 172.16.15.1 #nameserver 77.88.8.8 EOF

подъём:

ifup lxcbr0

==== в контейнере ====

Настраиваем любую подсистему конфигурации сетевых интерфейсов; например, для случая [[etcnet|/etc/net]] на eth0:

===== DHCP =====

==> /etc/net/ifaces/eth0/options <==
TYPE=eth
BOOTPROTO=dhcp

===== статика =====

==> /etc/net/ifaces/eth0/ipv4address <==
a.b.c.d/m

==> /etc/net/ifaces/eth0/ipv4route <==
default via a.b.c.g

==> /etc/net/ifaces/eth0/options <==
BOOTPROTO=static
ONBOOT=yes

==> /etc/net/ifaces/eth0/resolv.conf <==
search домены
domain домен
nameserver d.n.s.1
nameserver d.n.s.2

=== диагностика === ==== запуск контейнера ====

lxc-start -F --logpriority DEBUG --logfile ''alt-p10-test.log'' -n ''alt-p10-test''

При отказе запуска и диагностике вида: lxc-start: alt-p10-test: ../src/lxc/conf.c: lxc_setup_dev_console: 2028 Read-only file system - Failed to change console mode lxc-start: alt-p10-test: ../src/lxc/conf.c: lxc_setup_console: 2188 Read-only file system - Failed to setup console lxc-start: alt-p10-test: ../src/lxc/conf.c: lxc_setup: 4474 Failed to setup console lxc-start: alt-p10-test: ../src/lxc/start.c: do_start: 1272 Failed to setup container "alt-p10-test" проверьте, что никакая дрянь из состава {{pkg|lxc}} не испортила режим монтирования {{path|/dev}} или {{path|/dev/pts}}:

mount | grep /dev

и при необходимости исправьте:

mount -o remount,rw /dev/pts

==== доступ по ssh ==== ssh: PTY allocation request failed on channel 0 stdin: is not a tty -- см. выше насчёт lxc.pty.max также проверить на отсутствие опции 'restricted' или 'no-pty' в публичном ключе

==== конфигурирование сети изнутри ==== Похоже, даже при lxc.net.0.flags = down данное поделие создаёт внутриконтейнерный конец veth поднятым и норовит повесить на него ipv6 autoconfig с последствиями для попытки поднять/сконфигурировать его, скажем, по DHCP средствами etcnet вида 'eth0' is already up

Решение пока не найдено, обход -- либо ip link set eth0 down отдельным сервисом перед запуском network, либо service network restart в каком /etc/rc.d/rc.local

=== p11 ===

shaba@ [http://lists.altlinux.org/pipermail/devel/2025-April/219158.html предупреждает]: PS: при обновлении контейнеров [с p10 до p11] не забывайте сделать echo "%_netsharedpath /sys:/proc" > /etc/rpm/macros.d/container https://bugzilla.altlinux.org/43533

== Ссылки ==

  • [http://habrahabr.ru/blogs/virtualization/74808/ lxc — нативные контейнеры Linux]
  • [http://linuxcontainers.org/ Infrastructure for container projects]
  • [http://help.ubuntu.com/community/LXC LXC on help.ubuntu.com]
  • [http://lxc.teegra.net/ LXC]
  • [http://www.ibm.com/developerworks/ru/library/l-lxc-containers/ LXC: Kонтейнерные утилиты Linux]
  • [http://prefetch.net/blog/index.php/2009/06/21/installing-lxc-containers-on-fedora-hosts/ Installing lxc-containers on Fedora hosts]
  • [http://xgu.ru/wiki/LXC LXC on wiki xgu.ru]
  • [http://wiki.gentoo.org/wiki/LXC LXC — Gentoo Wiki]
  • [http://habr.com/company/selectel/blog/308208/ Управление контейнерами с LXD]

== Примечания == [[Категория:Виртуализация]] [[Категория:Admin]]


Verified Source: AltLinux Technical Wiki