Я думаю, что вы не можете сделать это, используя только docker.
Функция format
командной строки эффективно берет каждую строку ввода (по одной для каждого контейнера) и применяет к ней шаблон Go.Поэтому вам нужен еще один инструмент для объединения строк в массив JSON.
Один из способов достижения вашей цели - использование превосходного инструмента jq
:
docker container ls --format="{\"name\":\"{{.Names}}\"}" --all | jq --slurp
Это генерирует каждую строку контейнера в виде строки JSON: {"name": "[VALUE]"}
, а затем использует jq
для превращения их в массив JSON.
Сложность при выполнении этого непосредственно в bash заключается в том, что JSON ограничивается тем, что последний элемент всписок нельзя завершить с помощью ,
.Итак, следующий простой скрипт bash генерирует недопустимый JSON, и вам потребуется дополнительная логика для его удаления (или еще лучше, не добавляйте последний):
echo "[$(for CONTAINER in $(docker container ls --format="{{.Names}}" --all); do echo "{\"name\":\"${CONTAINER}\"},"; done;)]"