如何在實例中執行命令

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 不知道使用者的主目錄或使用者所屬的補充群組。

依預設,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 會設定下列預設值(除非它們以以上所述的其中一種方式傳遞)

變數名稱

條件

PATH

-

串連

  • /usr/local/sbin

  • /usr/local/bin

  • /usr/sbin

  • /usr/bin

  • /sbin

  • /bin

  • /snap(如果適用)

  • /etc/NIXOS(如果適用)

LANG

-

C.UTF-8

HOME

以 root 身分執行 (UID 0)

/root

USER

以 root 身分執行 (UID 0)

root

取得實例的 Shell 存取權

如果您想要直接在您的實例中執行命令,請在其中執行 Shell 命令。例如,輸入以下命令(假設 /bin/bash 命令存在於您的實例中)

incus exec <instance_name> -- /bin/bash

依預設,您會以 root 使用者身分登入。如果您想要以不同的使用者身分登入,請輸入以下命令

incus exec <instance_name> -- su --login <user_name>

注意

根據您在實例中執行的作業系統,您可能需要先建立使用者。

若要結束實例 Shell,請輸入 exit 或按下 Ctrl+d