web-dev-qa-db-fra.com

LXD - Comment exécuter un script dans un conteneur depuis un hôte

J'ai écrit un script d'extraction github dans le conteneur en cours d'exécution afin que celui-ci puisse obtenir les codes mis à jour. Mais comment puis-je appeler ce script à partir de la machine hôte?

J'ai essayé avec quelque chose comme ça mais sans succès.

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

J'ai également essayé de pousser un répertoire de l'hôte vers les conteneurs lxd, mais il ne copie pas le sous-répertoire dans le conteneur.

Quelqu'un pourrait-il aider?

Merci beaucoup!

1
Spencer

Lorsque vous exécutez lxc exec sur un conteneur Ubuntu, vous obtenez un shell racine et votre répertoire personnel est /root.

Si vous utilisez un compte non root (tel que ubuntu de ubuntu:18.04), vous pouvez obtenir un shell dans ce compte avec

lxc exec mycontainer -- Sudo --login --user ubuntu

Et si vous voulez exécuter une commande en tant qu’utilisateur ubuntu, alors vous pouvez

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

Vous avez une faute de frappe dans lxc exec container-name --sh -c "cd ~ && ll". Il devrait y avoir un espace après -- parce que -- est une instruction spéciale pour le shell de votre hôte qui dit que la commande lxc exec doit cesser de lire les options suivantes comme des options pour lxc exec. Par exemple, ce qui suit est incorrect, car l'option -l est traitée par lxc exec au lieu d'être transmise mot pour mot dans le conteneur.

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

Le correct serait

$ lxc exec mycontainer -- ls -l

Vous pouvez envoyer un répertoire de l'hôte au conteneur en exécutant

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

L'arborescence de répertoires /home/myusername/myfiles/ sur l'hôte sera copiée dans le conteneur mycontainer à l'intérieur du répertoire (existant) /home/ubuntu/ (dans ce conteneur).

2
Simos