インスタンス内でコマンドを実行するには#
LXDでは、ネットワークを経由してインスタンスにアクセスする必要なしに、LXDクライアントを使用してインスタンス内でコマンドを実行できます。
コンテナでは、これは常に機能し、LXDによって直接処理されます。
仮想マシンでは、これが機能するには、仮想マシン内lxd-agent
プロセスが稼働している必要があります。
インスタンス内部でコマンドを実行するには lxc exec
コマンドを使います。
シェルコマンド (例えば、 /bin/bash
) を実行することで、インスタンスにシェルアクセスできます。
インスタンス内部でコマンドを実行する#
ホストマシンの端末から単一のコマンドを実行するには、lxc exec
コマンドを使います。
lxc exec <instance_name> -- <command>
例えば、コンテナ上のパッケージリストを更新するには以下のコマンドを入力します。
lxc exec ubuntu-container -- apt-get update
実行モード#
インタラクティブ・モードでは、入力(stdin)と出力(stdout, stderr)を扱うために疑似端末装置(PTS)が使用されます。
これは、ターミナル・エミュレータに接続されている場合(スクリプトから実行されていない場合)、CLIによって自動的に選択されます。
インタラクティブ・モードを強制するには、--force-interactive
か--mode interactive
をコマンドに追加します。
非インタラクティブ・モードでは、代わりにパイプが (stdin、stdout、stderrのそれぞれに1つずつ) 割り当てられます。
これにより、多くのスクリプトで必要とされるように、コマンドを実行しながら、stdin、stdout、stderrを別々に適切に取得することができます。
非インタラクティブ・モードを強制するには、--force-noninteractive
か--mode non-interactive
をコマンドに追加します。
ユーザー、グループ、作業ディレクトリ#
LXDはインスタンス内のデータを読まない、あるいはその中にあるものを信用しないというポリシーを持っています。
これは、LXDがユーザーやグループの解決を処理するために、/etc/passwd
、/etc/group
や/etc/nsswitch.conf
のようなものを解析しないことを意味しています。
結果として、LXDはユーザのホームディレクトリがどこにあるか、あるいはどのような補助的なグループがあるかを知りません。
デフォルトでは、LXDはroot (UID 0)、デフォルトのグループ(GID 0)としてコマンドを実行し、作業ディレクトリは/root
に設定されています。
ユーザー、グループ、作業ディレクトリは以下のフラグによって上書きできます。
--user
- コマンドを実行するユーザID--group
- コマンドを実行するグループID--cwd
- コマンドを実行するディレクトリ
環境#
以下の2つの方法でexecセッションに環境変数を渡せます。
- インスタンスオプションとして環境変数を渡す
インスタンス内で
ENVVAR
環境変数をVALUE
に設定するには、environment.ENVVAR
インスタンスオプションを設定します。lxc config set <instance_name> environment.ENVVAR=VALUE
- execコマンドに環境変数を渡す
execコマンドに環境変数を渡すには、
--env
フラグを使います。 例えば以下のようにします。lxc exec <instance_name> --env ENVVAR=VALUE -- <command>
さらに、LXDは (上記のいずれかの方法で渡されない限り) 以下のデフォルト値を設定します。
変数名 |
条件 |
値 |
---|---|---|
|
- |
以下を連結したもの
|
|
- |
|
|
rootで実行する場合(UID 0) |
|
|
rootで実行する場合(UID 0) |
|
インスタンスにシェルアクセスする#
インスタンス内で直接コマンドを実行したい場合、インスタンス内でシェルコマンドを実行します。
例えば、以下のコマンド(インスタンス内に/bin/bash
コマンドが存在する想定)を入力します。
lxc exec <instance_name> -- /bin/bash
デフォルトではroot
ユーザでログインします。
別のユーザでログインしたい場合は、以下のコマンドを入力します。
lxc exec <instance_name> -- su --login <user_name>
注釈
インスタンス内で稼働しているオペレーティングシステムによっては、先にユーザを作成する必要があるかもしれません。
インスタンスシェルを終了するには、exit
を入力するかCtrl
+d
を押します。