Как можно настроить автоматический запуск контейнеров LXC, которые находятся в разных каталогах (lxcpath)?

Можно ли указать несколько путей для lxсpath в конфигурации lxc? Я создал контейнер с параметром <code>-P /my/folder/for_lxc</code>, но он не запускается автоматически после перезагрузки хоста или при выполнении команды systemctl restart lxc-auto.service. При создании файла /etc/lxc/lxc.conf и добавлении в него строки lxcpath=/my/folder/for_lxc, автоматически стартует контейнер из этой кастомной директории, но не запускаются контейнеры из стандартной директории /var/lib/lxc. Я пробовал добавить в lxc.conf две строки: <br/> <pre><code>lxc.lxcpath = /my/folder/for_lxc
lxc.lxcpath = /var/lib/lxc</code></pre> <br/> Однако это не решает проблему — запускаются только те контейнеры, путь к которым указан в первой строке. <br/> <br/> Как можно настроить автостарт всех контейнеров хоста, расположенных в различных каталогах?
  • 29 декабря 2024 г. 10:53
Ответы на вопрос 2
Для настройки автоматического запуска LXC-контейнеров, которые находятся в разных каталогах, вам нужно учитывать несколько аспектов, так как LXC не поддерживает указание нескольких путей в конфигурации `lxcpath`.

Вот несколько подходов, которые вы можете использовать для решения вашей проблемы:

### 1. Скрипт для автозапуска контейнеров

Создайте скрипт, который будет запускать все контейнеры, которые вы хотите запустить автоматически. Например, вы можете использовать `lxc-ls` для получения списка контейнеров и `lxc-start` для их запуска.

Создайте файл `/usr/local/bin/lxc-autostart.sh`:

```bash
#!/bin/bash

# Запуск контейнеров из кастомной директории
for container in /my/folder/for_lxc/*; do
    if [ -d "$container" ]; then
        lxc-start -n "$(basename "$container")" -d
    fi
done

# Запуск контейнеров из стандартной директории
for container in /var/lib/lxc/*; do
    if [ -d "$container" ]; then
        lxc-start -n "$(basename "$container")" -d
    fi
done
```

Не забудьте сделать скрипт исполняемым:

```bash
chmod +x /usr/local/bin/lxc-autostart.sh
```

### 2. Настройка systemd для автоматического запуска

Создайте unit файл для systemd, который будет запускать ваш скрипт при загрузке:

Создайте файл `/etc/systemd/system/lxc-autostart.service`:

```ini
[Unit]
Description=Autostart LXC containers
After=lxc.service

[Service]
Type=oneshot
ExecStart=/usr/local/bin/lxc-autostart.sh
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target
```

Активируйте сервис, чтобы он запускался при загрузке:

```bash
sudo systemctl enable lxc-autostart.service
```

### 3. Используйте иерархию конфигураций

Если у вас много контейнеров в разных директориях, вы можете также рассмотреть возможность создания дополнительной конфигурационной системы, например, с использованием `lxc.include` в основном конфиге или отдельных конфигурационных файлах для каждого контейнера с указанием необходимых параметров.

### 4. Обратите внимание на `lxc.auto.start`

Для каждого контейнера может быть также настроена автоматическая активация с помощью файла конфигурации контейнера. Убедитесь, что у вас есть следующая строка в каждом конфигурационном файле контейнера (например, `/my/folder/for_lxc/my-container/config`):

```ini
lxc.autostart = "true"
```

### Заключение

Использование метода со скриптом в связке с systemd — это наиболее универсальный подход для автоматического запуска контейнеров из различных директорий, пока LXC не предоставит возможность указывать несколько путей для `lxcpath`.
lxc.lxcpath=/my/folder/for_lxc:/var/lib/lxc 
Пробуйте так
Похожие вопросы