====== LXD ======
# Информация о контейнере и список снапшотов:
lxc info
# Сделать снапшот контейнера:
lxc snapshot
# Стартовать контейнер:
lxc start
===== Монтирование директорий по NFS =====
С этим сложности. В непривилегированных контейнерах не получится монтировать что-то по NFS.
Решение: примонтировать по NFS в на LXD-хосте, а затем подключить примонтированную директорию к контейнеру в качестве диска.
:!: В LXD обнаружился занятный баг: если подключенную диреткорию не удается примонтировать по NFS, то контейнер не сможет стартовать. Установка опции required диска в false не поможет. Чтобы контейнер смог стартовать, директория должна либо отсутствовать, либо быть примонтирована без ошибок.
Поэтому automount работать не будет, и вместо него нужно использовать autofs:
daqserv1 -fstype=nfs4,soft,rsize=131072,wsize=32768 daqserv1:/data
devices:
daqserv1:
path: /daqserv1/
required: "false"
source: /nfsmounts/daqserv1/
type: disk
===== Проблемы с Docker =====
Docker перезаписывает правила фаервола (баг https://github.com/docker/for-linux/issues/103, который разработчики пока не починили). После перезагрузки новые правила фаервола заблокировали связь контейнеров LXD.
Решение — самостоятельно добавить правила фаервола, разрешающие общение контейнеров LXD:
sudo iptables -I DOCKER-USER -i lxdbr0 -j ACCEPT -m comment --comment "generated for LXD network lxdbr0"
sudo iptables -I DOCKER-USER -o lxdbr0 -j ACCEPT -m comment --comment "generated for LXD network lxdbr0"
Автоматическое добавление правил в хуке на ifup может не работать, поскольку чейны DOCKER могут еще не быть созданы к этому моменту.
Поэтому создаем свой сервис, который будет стартовать после docker и добавлять нужные правила:
#!/usr/bin/env bash
date > /var/log/post-docker-timestamp
iptables -I DOCKER-USER -i lxdbr0 -j ACCEPT -m comment --comment "generated for LXD network lxdbr0"
iptables -I DOCKER-USER -o lxdbr0 -j ACCEPT -m comment --comment "generated for LXD network lxdbr0"
[Unit]
Description=Post Docker
After=docker.service
BindsTo=docker.service
ReloadPropagatedFrom=docker.service
[Service]
Type=oneshot
ExecStart=/usr/local/bin/post-docker.sh
ExecReload=/usr/local/bin/post-docker.sh
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
chmod +x /usr/local/bin/post-docker.sh
systemctl daemon-reload
systemctl enable postdocker.service