Docker

Докер-объекты

listContainers(options?): Promise<unknown>

Чтобы получает список контейнеров:

const containers = await ddClient.docker.listContainers();

listImages(options?): Promise<unknown>

Чтобы получает список образов локальных контейнеров:

const images = await ddClient.docker.listImages();

Подробнее об данных методах см. в Справочник по API Docker.

Примечание

Устаревший доступ к объектам Docker

Приведенные далее методы устарели и будут удалены в будущей версии. Воспользуйтесь способами, указанными выше.

const containers = await window.ddClient.listContainers();

const images = await window.ddClient.listImages();

Докер-команды

Расширения также могут напрямую выполнять командную строку docker.

exec(cmd, args): PromiseExecResult

const result = await ddClient.docker.cli.exec("info", [
  "--format",
  '"{{ json . }}"',
]);

Результат содержит как стандартный вывод, так и стандартную ошибку выполненной команды:

{
  "stderr": "...",
  "stdout": "..."
}

В этом примере вывод команды docker представляет собой вывод 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,
  },
});

Дочерний процесс, созданный расширением, автоматически уничтожается (SIGTERM) при закрытии панели управления в Docker Desktop или при выходе из пользовательского интерфейса расширения. При необходимости вы также можете использовать результат вызова 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();

Данный API exec(streamOptions) также можно использовать для прослушивания событий 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() для каждой команды и проанализировать результаты, чтобы передать параметры следующей команде, если это необходимо.

Подробнее об данных методах см. в Справочник по исполнительному API.

Примечание

Устарело выполнение команд Docker

Данный метод устарел и будет удален в будущей версии. Используйте тот, который указан чуть далее.

const output = await window.ddClient.execDockerCmd(
  "info",
  "--format",
  '"{{ json . }}"'
);

window.ddClient.spawnDockerCmd("logs", ["-f", "..."], (data, error) => {
  console.log(data.stdout);
});