web-dev-qa-db-ja.com

LXD-ホストからコンテナー内でスクリプトを実行する方法

コンテナーが更新されたコードを取得できるように、実行中のコンテナー内にgithub pullスクリプトを作成しました。しかし、このスクリプトをホストマシンからどのように呼び出すことができますか?

私はこのようなもので試しましたが、成功しませんでした。

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

また、ホストからlxdコンテナにディレクトリをプッシュしようとしましたが、サブディレクトリをコンテナにコピーしません。

誰か助けてもらえますか?

どうもありがとう!

1
Spencer

Ubuntuコンテナでlxc execを実行すると、ルートシェルが取得され、ホームディレクトリは/rootになります。

非ルートアカウント(ubuntu:18.04ubuntuなど)を使用している場合は、次のコマンドでそのアカウントにシェルを取得できます。

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/は、(既存の)ディレクトリ/home/ubuntu/(そのコンテナ内)のコンテナmycontainerにコピーされます。

2
Simos