如何在實例中執行命令¶
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 會設定下列預設值(除非它們以以上所述的其中一種方式傳遞)
變數名稱 |
條件 |
值 |
---|---|---|
|
- |
串連
|
|
- |
|
|
以 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
。