如何在实例中运行命令¶
Incus 允许使用 Incus 客户端在实例内部运行命令,而无需通过网络访问实例。
对于容器,这始终有效,并由 Incus 直接处理。对于虚拟机,必须在虚拟机内部运行 incus-agent
进程才能使其工作。
要在实例内部运行命令,请使用 incus exec
命令。通过运行 shell 命令(例如,/bin/bash
),您可以获取对实例的 shell 访问权限。
在实例内部运行命令¶
要从主机终端运行单个命令,请使用 incus exec
命令
incus exec <instance_name> -- <command>
例如,输入以下命令以更新容器上的软件包列表
incus exec ubuntu-container -- apt-get update
执行模式¶
Incus 可以以交互式或非交互式方式执行命令。
在交互模式下,伪终端设备 (PTS) 用于处理输入 (stdin) 和输出 (stdout、stderr)。如果连接到终端模拟器(而不是从脚本运行),CLI 会自动选择此模式。要强制使用交互模式,请向命令添加 --force-interactive
或 --mode interactive
。
在非交互模式下,将分配管道(每个 stdin、stdout 和 stderr 一个)。此方法允许运行命令并根据许多脚本的要求正确获取单独的 stdin、stdout 和 stderr。要强制使用非交互模式,请向命令添加 --force-noninteractive
或 --mode non-interactive
。
用户、组和工作目录¶
Incus 有一项策略,即不读取实例中的数据或信任可以在实例中找到的任何内容。因此,Incus 不会解析 /etc/passwd
、/etc/group
或 /etc/nsswitch.conf
等文件来处理用户和组解析。
因此,Incus 不知道用户的 home 目录或用户所属的补充组。
默认情况下,Incus 以 root
(UID 0)身份运行命令,使用默认组(GID 0),并将工作目录设置为 /root
。您可以通过以下标志指定绝对值来覆盖用户、组和工作目录
--user
- 运行命令的用户 ID--group
- 运行命令的组 ID--cwd
- 命令应运行的目录
环境¶
您可以通过以下两种方式将环境变量传递到 exec 会话
- 将环境变量设置为实例选项
要在实例中将
ENVVAR
环境变量设置为VALUE
,请设置environment.ENVVAR
实例选项(请参阅environment.*
)incus config set <instance_name> environment.ENVVAR=VALUE
- 将环境变量传递到 exec 命令
要将环境变量传递到 exec 命令,请使用
--env
标志。例如incus exec <instance_name> --env ENVVAR=VALUE -- <command>
此外,Incus 设置以下默认值(除非它们以上述方式之一传递)
变量名称 |
条件 |
值 |
---|---|---|
|
- |
的连接
|
|
- |
|
|
以 root(UID 0)身份运行 |
|
|
以 root(UID 0)身份运行 |
|
获取对实例的 shell 访问权限¶
如果您想直接在实例中运行命令,请在其中运行 shell 命令。例如,输入以下命令(假设您的实例中存在 /bin/bash
命令)
incus exec <instance_name> -- /bin/bash
默认情况下,您以 root
用户身份登录。如果您想以其他用户身份登录,请输入以下命令
incus exec <instance_name> -- su --login <user_name>
注意
根据您在实例中运行的操作系统,您可能需要先创建一个用户。
要退出实例 shell,请输入 exit
或按 Ctrl
+d
。