Назад | Перейти на главную страницу

Простой способ передачи файлов между хостом и контейнером LXC на LVM

Это простая задача в случае контейнеров, использующих одну и ту же файловую систему, но я не уверен, какой подход будет правильным для контейнеров, использующих диски LVM.

Я знаю, что могу использовать rsync или scp но я хотел бы знать, можно ли это сделать без настройки ssh/ftp/http серверы. Кроме того, было бы неплохо иметь возможность передавать файлы без изменения конфигурации контейнера, поскольку для этого потребуется перезапуск контейнера. Было бы неплохо избегать постоянных монтируемых общих папок, поскольку это может представлять потенциальную угрозу безопасности (должна быть доступна опция простого монтирования / размонтирования).

Мне пришла в голову возможность использовать сервер WebDAV на хосте и монтировать его в контейнере, но я еще не проанализировал его и не уверен в возможном снижении производительности. Другой вариант, о котором я подумал, - это смонтировать раздел LVM на хосте, но я не уверен, безопасно ли это.

Обновить

В моей конфигурации я создаю контейнеры с помощью следующей команды:

lxc-create -t ubuntu -n "${NAME}" -B lvm --vgname lxc-vg --fssize "${SIZE}"

Я использую конфигурацию по умолчанию, за исключением функции автозапуска, которая достигается путем добавления следующих строк в /var/lib/lxc/${NAME}/config файл:

lxc.start.auto = 1
lxc.start.delay = 0

Исправленный ответ: контейнеры LXC используют то же ядро, что и хост, поэтому любая файловая система, которую они монтируют, должна быть доступна извне.

Если вы сделаете cat /proc/mounts на хосте вы видите файловые системы контейнера?

Если вы видите строку вроде /dev/mapper/... /var/lib/lxc/o1/rootfs ext4 ... тогда вы сможете получить доступ /var/lib/lxc/o1/rootfs с хоста без каких-либо дополнительных команд.

Я знаю, что это старый вопрос, но для кого-то, кто попадает сюда при поиске способов копирования файлов между хостом и контейнером, это может помочь.

Чтобы вытащить файл my-file из контейнера имя-контейнера в текущую папку, используйте:

lxc file pull container-name/any-path/my-file .

Чтобы отправить «мой файл», используйте:

lxc file push my-file container-name/any-path/

Чтобы рекурсивно протолкнуть папку my-dir, используйте:

lxc file push -r my-dir container-name/any-path/

Лучшим, каким-то образом встроенным способом передачи данных с хоста в lxc-контейнер, является строка 4 в приведенном ниже коде:

1 $ mkdir /tmp/transferDir
2 $ cp <some files> /tmp/transferDir/<some files>
3 $ cd /tmp
4 $ tar -C transferDir -c . | lxc-attach -n <container_name> -- /bin/sh -c "tar -C /tmp/ -vx; chmod 1777 /tmp;"
5 $ rm -r /transferDir

В chmod 1777 /tmp важно, иначе после копирования прав на эту папку (контейнеры / tmp) будут изменены, и вы столкнетесь с такими проблемами, как этот частый о невозможности перезапуска сервера xyz-sql и др.