LXD - Как выполнить скрипт внутри контейнера с хоста

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

Я пробовал что-то подобное, но безуспешно.

lxc exec container-name -- gitPull.sh
lxc exec container-name --sh -c "cd ~ && ll"

Я также пытался переместить каталог с хоста в контейнеры lxd, но он не скопирует подкаталог в контейнер.

Может ли кто-нибудь помочь?

Большое спасибо!

1 ответ

Когда ты бежишь lxc exec в контейнере Ubuntu вы получаете корневую оболочку и ваш домашний каталог /root,

Если вы используете учетную запись без полномочий root (например, ubuntu от ubuntu:18.04), то вы можете получить оболочку на этот счет с

lxc exec mycontainer -- sudo --login --user ubuntu

И если вы хотите запустить команду от имени пользователя ubuntu, тогда ты можешь

$ lxc exec mycontainer -- sudo --login --user ubuntu whoami
ubuntu

У вас есть опечатка в lxc exec container-name --sh -c "cd ~ && ll", Там должно быть место после -- так как -- это специальная инструкция для оболочки вашего хоста, которая говорит, что lxc exec Команда должна прекратить чтение любых последующих опций в качестве опций для lxc exec, Например, следующее неверно, потому что -l опция обрабатывается lxc exec вместо того, чтобы дать дословно как команду для запуска в контейнере.

$ lxc exec mycontainer ls -l
Error: unknown shorthand flag: 'l' in -l

Правильный будет

$ lxc exec mycontainer -- ls -l

Вы можете отправить каталог с хоста на контейнер, запустив

$ lxc file push --recursive /home/myusername/myfiles/ mycontainer/home/ubuntu/

Дерево каталогов /home/myusername/myfiles/ на хосте будет скопирован в контейнер mycontainer внутри (существующего) каталога /home/ubuntu/ (в этом контейнере).

Другие вопросы по тегам