Docker
Docker 物件
▸ listContainers(options?): Promise<unknown>
取得容器列表
const containers = await ddClient.docker.listContainers();▸ listImages(options?): Promise<unknown>
取得本機容器映像檔列表
const images = await ddClient.docker.listImages();關於這些方法的詳細資訊,請參閱 Docker API 參考文件。
已棄用的 Docker 物件存取方式
以下方法已棄用,並將在未來版本中移除。請改用上述指定的方法。
const containers = await window.ddClient.listContainers();
const images = await window.ddClient.listImages();Docker 指令
擴充功能也可以直接執行 docker 指令列。
▸ exec(cmd, args): Promise< ExecResult>
const result = await ddClient.docker.cli.exec("info", [
"--format",
'"{{ json . }}"',
]);執行結果包含該指令的標準輸出 (stdout) 與標準錯誤 (stderr)
{
"stderr": "...",
"stdout": "..."
}在此範例中,指令輸出為 JSON 格式。為方便起見,指令結果物件也具備可輕鬆進行解析的方法
result.lines(): string[]用於分割輸出內容為字串陣列。result.parseJsonObject(): any用於解析格式正確的 JSON 輸出。result.parseJsonLines(): any[]用於將每一行輸出內容解析為一個 JSON 物件。
▸ exec(cmd, args, options): void
上述指令會將輸出作為 Docker 指令執行結果進行串流傳輸。若您需要以串流方式取得輸出,或是指令輸出內容過長,此方法非常實用。
await ddClient.docker.cli.exec("logs", ["-f", "..."], {
stream: {
onOutput(data) {
if (data.stdout) {
console.error(data.stdout);
} else {
console.log(data.stderr);
}
},
onError(error) {
console.error(error);
},
onClose(exitCode) {
console.log("onClose with exit code " + exitCode);
},
splitOutputLines: true,
},
});當您關閉 Docker Desktop 中的儀表板或退出擴充功能 UI 時,擴充功能所建立的子處理序將會自動被終止 (SIGTERM)。如有需要,您也可以使用 exec(streamOptions) 呼叫的結果來主動終止 (SIGTERM) 該處理序。
const logListener = await ddClient.docker.cli.exec("logs", ["-f", "..."], {
stream: {
// ...
},
});
// when done listening to logs or before starting a new one, kill the process
logListener.close();此 exec(streamOptions) API 也可用於監聽 Docker 事件
await ddClient.docker.cli.exec(
"events",
["--format", "{{ json . }}", "--filter", "container=my-container"],
{
stream: {
onOutput(data) {
if (data.stdout) {
const event = JSON.parse(data.stdout);
console.log(event);
} else {
console.log(data.stderr);
}
},
onClose(exitCode) {
console.log("onClose with exit code " + exitCode);
},
splitOutputLines: true,
},
}
);注意您無法在單一
exec()呼叫中使用此方法來串聯指令(例如docker kill $(docker ps -q)或在指令間使用管道符號 `|`)。若有需要,您必須為每個指令呼叫
exec(),並解析結果以便將參數傳遞給下一個指令。
關於這些方法的詳細資訊,請參閱 Exec API 參考文件。
已棄用的 Docker 指令執行方式
此方法已棄用,並將在未來版本中移除。請改用下方指定的方法。
const output = await window.ddClient.execDockerCmd(
"info",
"--format",
'"{{ json . }}"'
);
window.ddClient.spawnDockerCmd("logs", ["-f", "..."], (data, error) => {
console.log(data.stdout);
});