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 . }}"',
]);

结果包含执行命令的标准输出和标准错误

{
  "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);
});
页面选项