Просмотреть только столбец ERROR в результате `docker service ps xxx`? - PullRequest
0 голосов
/ 06 октября 2019

Я знаю об использовании опции --format, но почему-то она не работает для некоторых полей (работает для поля ID), возможно, объектный граф здесь спрятан.

Вот всестолбцы, отображаемые при запуске просто docker service ps my_service_id:

ID - ИМЯ - ИЗОБРАЖЕНИЕ - УЗЕЛ - Желаемое состояние - Текущее состояние - Ошибка - Порты

Теперь я просто хочу показатьстолбец ОШИБКА для облегчения чтения с помощью следующей команды:

docker service ps --format '{{.ERROR}}' my_service_id

Однако он не работает и выдает следующую ошибку:

Ошибка разбора шаблона: template:: 1: 3: выполнение "" в <.ERROR>: невозможно оценить поле ERROR в типе * task.taskContext

Ответы [ 2 ]

2 голосов
/ 07 октября 2019

Поля чувствительны к регистру в формате вывода. Чтобы определить правильное имя, я обычно форматирую вывод как json и делаю его красивым с jq:

$ docker service ps --format '{{ json . }}' traefik_traefik | jq .
{
  "CurrentState": "Running 15 hours ago",
  "DesiredState": "Running",
  "Error": "",
  "ID": "lrmsc96zdfei",
  "Image": "localhost:5000/bmitch/traefik:1.7",
  "Name": "traefik_traefik.1",
  "Node": "bmitch",
  "Ports": ""
}
{
  "CurrentState": "Failed 15 hours ago",
  "DesiredState": "Shutdown",
  "Error": "\"task: non-zero exit (255)\"",
  "ID": "y6ocu5s2k7l2",
  "Image": "localhost:5000/bmitch/traefik:1.7",
  "Name": "traefik_traefik.1",
  "Node": "bmitch",
  "Ports": ""
}
{
  "CurrentState": "Complete 2 weeks ago",
  "DesiredState": "Shutdown",
  "Error": "",
  "ID": "nt8tsd7jfsgl",
  "Image": "localhost:5000/bmitch/traefik:1.7",
  "Name": "traefik_traefik.1",
  "Node": "bmitch",
  "Ports": ""
}

Оттуда вы можете выбрать нужные поля:

$ docker service ps --format '{{ .ID }}: {{ .Error }}' traefik_traefik
lrmsc96zdfei:
y6ocu5s2k7l2: "task: non-zero exit (255)"
nt8tsd7jfsgl:
2 голосов
/ 07 октября 2019

Мне не удалось использовать заглавные буквы в сочетании с флагом --format, но то, что работает, использует, например, '{{ .Status }}'. Кажется, что она чувствительна к регистру, и в отображаемой таблице всегда будут прописные буквы в каждом столбце, вероятно, на стороне клиента (Docker CLI).

Возвращенный (и обработанный) тип данных при выдаче различных подкоманд будет иметь экспортированные поля в Golang, что означает, что имя поля начинается с заглавной буквы. Это не всегда так, например, при использовании сокращений . Я могу ошибаться, учитывая, что мы используем шаблоны Голанга здесь.

Выводит ли следующая команда то, что вы хотели?

docker service ps --format '{{ .Error }}' my_service_id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...