Вывод из docker ps
очень трудно прочитать на терминалах шириной 80 символов.
/bin/ps
неплохо справляется с обтеканием вывода на узких терминалах (например, важная информация помещается первой, команда последней и обрезается). Интересно, можем ли мы сделать лучше.
Столько любви и много +1. Я использую терминалы 80x24 (к большому огорчению
мои коллеги), и это было незначительным раздражителем для меня в течение довольно долгого времени.
время.
Я должен сказать, что это часто получает меня также.
Любые идеи для решения? Наличие уменьшенной версии на более узких терминалах звучит неплохо.
Ну, удостоверение личности не обязательно должно быть там.
Как насчет этого:
NAME IMAGE STATUS PORTS COMMAND
prickly_perlman ubuntu:14.04 Up 15s 8000->8000/tcp sleep 30000
Объяснение:
/bin/ps
@bfirsh :thumbsup: с этими примечаниями;
--no-trunc
, теперь этот идентификатор контейнера больше не виден? Существует множество примеров, которые полагаются на эту функцию для очистки остановленных контейнеров.--columns=a,f,g
--sort=a,e
-a
))Что не так с конвейером на пейджер?
docker ps | less -S
@benjamin-thomas или docker ps
обнаруживают TTY и по умолчанию перенаправляют на less -S
?
Хороший трюк @benjamin-thomas, я обязательно воспользуюсь им в будущем. Одно из соображений заключается в том, что мне не нужна информация, которая мне важна, и самое главное, имена контейнеров. В то время как в моем случае меня обычно не волнуют, например, CREATED
и STATUS
.
IMO, вариант использования может различаться среди пользователей, для меня STATUS
_важно, чтобы быстро проверить, хорошо ли работают мои контейнеры или сделали ли они «упс».
Я не совсем уверен, должно ли это стать большой повторной реализацией вывода ps или _start_ сделать его немного чище по умолчанию и, опираясь на это, сделать его более настраиваемым, добавив параметры для указания столбцов для отображения, порядок сортировки и фильтрация.
@nathanleclaire , просто используйте клавиши со стрелками, как только вы окажетесь внутри less
, у вас будет доступ ко всему контенту. Или я вас неправильно понял?
@grahamc, почему бы и нет, лично я предпочитаю, чтобы инструменты не делали эти вещи автоматически. Всегда можно определить псевдоним оболочки для этой IMO, если это необходимо.
@thaJeztah указание имен столбцов с помощью переключателей имеет для меня смысл, например, системная команда ps /bin/ps -o pid,ruser=RealUser -o comm=Command
.
@benjamin-thomas О, я даже не понял этого. Хороший! Мне очень нравится это решение.
@benjamin-thomas /bin/ps
делает это автоматически. Если вы хотите отключить его, вы можете передать его через cat
или что-то еще.
Относительно ширины вывода docker ps
: действительно ли необходимо рассматривать каждую возможную цепочку связей с данным контейнером как новое имя для этого контейнера? Например, если у меня есть пять контейнеров с именами A, B, C, D и E, и A ссылается на B, B ссылается на C и т. д., то E будет иметь пять разных имен: E, D/E, C/. D/E, B/C/D/E и A/B/C/D/E.
Затем, если B также ссылается, скажем, на D, E получает еще БОЛЬШЕ имен: B/D/E и A/B/D/E. Один запуск системы, над которой я работаю, запускает семнадцать контейнеров, которые вместе, благодаря 31 взаимосвязи зависимости, имеют _триста восемьдесят семь имен_. Независимо от того, насколько широко я делаю окна терминала, вывод docker ps
нечитаем без пейджера. Действительно ли имеет смысл, чтобы количество имен было _хуже квадратичного_ по количеству контейнеров? Было бы по крайней мере неплохо, если бы был способ отключить этот педантичный уровень перечисления.
@mraccident : +1: docker ps
должно показывать только основное имя, а не все имена для этого контейнера
Привет, меня это тоже беспокоило, и я просто добавил опцию «--short» в докер. сохраняя полную колонку портов.
https://github.com/ChristianKniep/docker/tree/7477-short_ps
$ docker run --name fd1 -d -p 80 -p 22 -p 53 fedora sleep 600
af6599f9b1178b237f6c2524f14cada45a46b234168e5270b99b16d1ce0be295
$ docker run --name fd2 --link fd1:fd1 -d -p 80 -p 22 -p 53 fedora sleep 600
ec2b2afc72dae7e62b197dc5adbcdeb548435ac495b8c935c728eb7aff658004
$ docker run --name fd3 --link fd2:fd2 --link fd1:fd1 -d -p 80 -p 22 -p 53 fedora sleep 600
ac57921063cc6afbe1cf715872dc33df45147ef1f464859c0912261b88e6bb4b
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ac57921063cc fedora:latest sleep 600 3 seconds ago Up 2 seconds 0.0.0.0:49159->22/tcp, 0.0.0.0:49160->53/tcp, 0.0.0.0:49161->80/tcp fd3
ec2b2afc72da fedora:latest sleep 600 11 seconds ago Up 10 seconds 0.0.0.0:49156->22/tcp, 0.0.0.0:49157->53/tcp, 0.0.0.0:49158->80/tcp fd2,fd3/fd2
af6599f9b117 fedora:latest sleep 600 31 seconds ago Up 30 seconds 0.0.0.0:49153->22/tcp, 0.0.0.0:49154->53/tcp, 0.0.0.0:49155->80/tcp fd1,fd2/fd1,fd3/fd1,fd3/fd2/fd1
$ ./docker-1.1.2-dev ps -S
CONTAINER ID IMAGE PORTS NAMES
ac57921063cc fedora:latest 0.0.0.0:49159->22/tcp, 0.0.0.0:49160->53/tcp, 0.0.0.0:49161->80/tcp fd3
ec2b2afc72da fedora:latest 0.0.0.0:49156->22/tcp, 0.0.0.0:49157->53/tcp, 0.0.0.0:49158->80/tcp fd2,fd3/fd2
af6599f9b117 fedora:latest 0.0.0.0:49153->22/tcp, 0.0.0.0:49154->53/tcp, 0.0.0.0:49155->80/tcp fd1,fd2/fd1,fd3/fd1,fd3/fd2/fd1
$ ./docker-1.1.2-dev ps -h
Usage: docker ps [OPTIONS]
List containers
-a, --all=false Show all containers. Only running containers are shown by default.
--before="" Show only container created before Id or Name, include non-running ones.
-f, --filter=[] Provide filter values. Valid filters:
exited=<int> - containers with exit code of <int>
-l, --latest=false Show only the latest created container, include non-running ones.
-n=-1 Show n last created containers, include non-running ones.
--no-trunc=false Don't truncate output
-q, --quiet=false Only display numeric IDs
-S, --short=false Skip command created and status
-s, --size=false Display sizes
--since="" Show only containers created since Id or Name, include non-running ones.
$
Поскольку я новичок, я думаю, мой код можно было бы... оптимизировать...
Но удивительно, как легко изменить код, если ты уже целый год питонишь. Мне это нравится!
РЕДАКТИРОВАТЬ: Возможно, можно было бы получить размер терминала и выбить столбцы, чтобы сократить строки...
РЕДАКТИРОВАТЬ2: я сокращаю ИМЕНА и добавляю счетчик (ДЕТИ), хотя это немного вводит в заблуждение, потому что он также считает fd3->fd2->fd1.
$ ~/bin/docker-1.1.2-dev ps -S
CONTAINER ID IMAGE PORTS NAME #CHILDREN
9b382826657c fedora:latest 0.0.0.0:49168->22/tcp, 0.0.0.0:49169->53/tcp, 0.0.0.0:49170->80/tcp fd3 0
93f5a7b13d8b fedora:latest 0.0.0.0:49165->22/tcp, 0.0.0.0:49166->53/tcp, 0.0.0.0:49167->80/tcp fd2 1
4c6f3564612c fedora:latest 0.0.0.0:49162->80/tcp, 0.0.0.0:49163->22/tcp, 0.0.0.0:49164->53/tcp fd1 3
EDIT3: теперь я извлекаю правильное имя
$ ./docker-1.1.2-dev ps -S
CONTAINER ID IMAGE PORTS NAME #LINKS
71d9d03bba50 fedora:latest 0.0.0.0:49177->22/tcp, 0.0.0.0:49178->53/tcp, 0.0.0.0:49179->80/tcp fd3 0
cf67008f418f fedora:latest 0.0.0.0:49174->22/tcp, 0.0.0.0:49175->53/tcp, 0.0.0.0:49176->80/tcp fd2 1
5549c65007b5 fedora:latest 0.0.0.0:49171->22/tcp, 0.0.0.0:49172->53/tcp, 0.0.0.0:49173->80/tcp fd1 3
Я чувствую, что определение портов и многословность времени составляют большую часть ширины вывода docker ps
. Я думаю, что сокращение времени и перенос определений портов по строкам сэкономит много места (помимо возможности выбирать/скрывать столбцы).
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8a2e6a22ae1f me/abc-data:latest "/bin/sh -c bash" 6 sec Exited (0) 6 sec app-without-ports
749ed051fb73 me/webserver:latest "/opt/server/run.sh" 4 days Up 4 days 0.0.0.0:8080->8080/tcp, my-webserver
192.168.1.1:9990->9990/tcp
2eb3c43af24f me/app:latest "/opt/container-star 8 days Up 8 days 0.0.0.0:1234->1234/tcp, some-other-app
0.0.0.0:4567->4567/tcp,
0.0.0.0:50000->50000/tcp,
0.0.0.0:50000->50000/udp
Как насчет предоставления шаблона, например, путем установки переменной среды DOCKER_PS_FORMAT
с именем столбца: ширина : модификатор, имя столбца: ширина : модификатор,...
где modifier
может разрешить дополнительные настройки, такие как no-trunc
, full
(например, для идентификатора контейнера) или short
для CREATED
где ~1h
может быть сокращенной формой для About an hour ago
.
Я написал эту функцию bash/zsh в моем ~/.bashrc
чтобы лучше отображать вывод docker ps
, вы можете скрыть или изменить порядок столбцов:
dps() {
docker ps $@ | awk '
NR==1{
FIRSTLINEWIDTH=length($0)
IDPOS=index($0,"CONTAINER ID");
IMAGEPOS=index($0,"IMAGE");
COMMANDPOS=index($0,"COMMAND");
CREATEDPOS=index($0,"CREATED");
STATUSPOS=index($0,"STATUS");
PORTSPOS=index($0,"PORTS");
NAMESPOS=index($0,"NAMES");
UPDATECOL();
}
function UPDATECOL () {
ID=substr($0,IDPOS,IMAGEPOS-IDPOS-1);
IMAGE=substr($0,IMAGEPOS,COMMANDPOS-IMAGEPOS-1);
COMMAND=substr($0,COMMANDPOS,CREATEDPOS-COMMANDPOS-1);
CREATED=substr($0,CREATEDPOS,STATUSPOS-CREATEDPOS-1);
STATUS=substr($0,STATUSPOS,PORTSPOS-STATUSPOS-1);
PORTS=substr($0,PORTSPOS,NAMESPOS-PORTSPOS-1);
NAMES=substr($0, NAMESPOS);
}
function PRINT () {
print ID NAMES IMAGE STATUS CREATED COMMAND PORTS;
}
NR==2{
NAMES=sprintf("%s%*s",NAMES,length($0)-FIRSTLINEWIDTH,"");
PRINT();
}
NR>1{
UPDATECOL();
PRINT();
}' | less -FSX;
}
dpsa() { dps -a $@; }
Обходной хак. Измените, какие $cols[x] вы хотите сохранить по желанию.
docker ps | perl -ne '<strong i="6">@cols</strong> = split /\s{2,}/, $_; printf "%30s %20s %20s\n", $cols[1], $cols[3], $cols[4]'
Не было бы проще иметь что-то вроде:
$ docker ps --columns=name,id,status,image
и каждый мог просто использовать псевдоним docker ps
.
Спасибо, @caiguanhao. Умное временное решение. Добавил его как плагин Tackle для рыбной раковины.
Ребята, только что внесли небольшое улучшение в код @caiguanhao , чтобы иметь возможность выбирать, какие столбцы отображать. Когда у вас есть контейнер, который предоставляет много портов (например, служба Consul, которая предоставляет 5 или 6 портов и может вызвать переполнение экрана даже на 300 символов), хорошо иметь команду для отображения всех столбцов, кроме этих портов, и затем еще один, который показывает только имя контейнера и его порты (я добавил эти параметры как новые команды по умолчанию):
https://github.com/jpmelos/dotfiles/commit/457a9c68f87eb5bd455aa22bdadab81c2651c2ea
Одно простое изменение, которое может немного помочь, — уменьшить интервал между столбцами CONTAINER ID и IMAGE. Все остальные столбцы разделены 3 пробелами, а эти два — 8.
Мои 5 центов, пока они не сделают "docker ps" читаемым:
Увидим ли мы какое-либо обновление по этому поводу?
Я думаю, что docker ps
— самая распространенная команда. Я надеюсь, что не так сложно дать нам возможность фильтровать столбцы для отображения.
(Я бы ожидать что - то подобное , что )
Как сказал @AntouanK, а @wpp уже предложил, флаг столбцов будет предпочтительнее для большинства ситуаций.
Я думаю, что # 10255 должен решить эту проблему.
@duglin Делает ли это значение по умолчанию короче? Я бы хотел оставить это открытым, если нет.
@bfirsh хорошая мысль, нет, это не изменит значение по умолчанию. Но я не уверен, что мы можем изменить значение по умолчанию до версии 2 (если/когда это будет), потому что мы бы сломали существующие клиенты, если бы мы это сделали.
то же самое. может быть, какой-то интеллектуальный механизм, который выбирает столбцы по умолчанию, отображаемые путем применения пороговых значений к ENV['COLUMNS']?
Я согласен с https://github.com/docker/docker/issues/7477#issuecomment -70243594, просто дайте нам возможность выбрать столбцы.
Я также голосую за вариант https://github.com/docker/docker/issues/7477#issuecomment -70243594.
docker ps
будет docker ps --columns=id,image,command,created,status,ports,name
и можно было бы легко реализовать больше столбцов, таких как ip
как того хотели некоторые пользователи https://github.com/docker/docker/issues/8786
+1 для --columns
В качестве обходного пути я комбинирую docker ps -q
с docker inspect --format
:
docker ps -q | xargs docker inspect --format '{{printf "%.12s\t%s" .Id .Config.Cmd}}'
Вы должны копаться в выводе docker inspect и golang templating, но это почти бесконечно настраивается.
@jafcrocker Хороший. Может быть, мы можем сделать публичный список, чтобы сохранить набор обходных путей, подобных этому? Пока мы не получим несколько флагов для правильной настройки вывода...
мы только что объединили #14699, что позволяет вам запустить docker ps --format ...
для изменения вывода ps. Вы также можете установить формат по умолчанию, если хотите, проверьте этот снимок экрана:
Я собираюсь закрыть эту проблему как исправленную. Пожалуйста, не стесняйтесь попробовать и дайте нам знать, что вы думаете.
Для тех, кто хочет попробовать, «основные» сборки можно найти по адресу https://master.dockerproject.org, и эта функция должна появиться там в ближайшее время (если еще не появилась).
Хотя --format
— действительно хорошее дополнение, я не думаю, что оно решает основную проблему. Почти все инструменты командной строки, которые я использую ежедневно, правильно обрабатывают терминалы переменного размера. Большинство, глядя на переменную окружения $COLUMNS
и отображая соответствующий текст.
Например, ps aux
в терминале 80x24:
И в терминале 137x24:
Он изменяет ширину столбца и укорачивает команду, чтобы все хорошо помещалось в одну строку. Все для удобочитаемости и простоты разбора для человека.
Конечно, я могу написать оболочку bash, которая будет применять различные параметры форматирования в зависимости от $COLUMNS
но это начинает звучать очень хакерски, и я думаю, что это должно быть поведением по умолчанию для любой программы командной строки. К сожалению, вывод docker беспорядочный и трудный для чтения.
Есть ли причина, по которой это не делается? Какие-то ограничения в какой-то библиотеке или решение с вашей стороны? Нужно знать, стоит ли это что-то исправить в PR, или, может быть, я ошибаюсь.
@nsg : Согласен - вывод по умолчанию все еще можно улучшить.
Были ли обновления по этому вопросу?
Поэтому по какой-то причине хэши изображений больше не усекаются в выводе ps. Мне уже приходилось делать свой терминал сверхшироким (занимающим весь экран) только для того, чтобы сделать докер пригодным для использования в прошлом, теперь этого уже недостаточно. Начиная с версии 1.7.1, каждая строка имеет ширину около 200 столбцов. Кто использует такой широкий терминал?
Я немного поигрался с этим.
Удаление ID и created немного помогает нам:
NAMES IMAGE STATUS PORTS COMMAND
elegant_turing nginx Up 13 secs 0.0.0.0:80->80/tcp, 443/tcp "nginx -g 'daemon off"
composedemo_web_1 composedemo_ Exited (2) 23 secs ago "/bin/sh -c 'python a"
composedemo_redis_1 redis Exited (137) 11 secs ago "/entrypoint.sh redis"
elated_carson hello-world Exited (0) 23 mins ago "/hello"
Все равно слишком долго. Мы могли бы игнорировать 0.0.0.0
:
NAMES IMAGE STATUS PORTS COMMAND
elegant_turing nginx Up 13 secs 80->80/tcp, 443/tcp "nginx -g 'daemon off"
composedemo_web_1 composedemo_ Exited (2) 23 secs ago "/bin/sh -c 'python a"
composedemo_redis_1 redis Exited (137) 11 secs ago "/entrypoint.sh redis"
elated_carson hello-world Exited (0) 23 mins ago "/hello"
Но все же немного долго. Возможно, требуется некоторый творческий подход, чтобы сократить статус ... что-то разборчивое / сканируемое, но все же короткое ... может быть, Exit (2) 23s ago
?
Хотя команду можно сократить, нам также потребуется сократить что-либо еще, чтобы убедиться, что отображается хотя бы часть команды. Не могу сократить имя. Возможно, изображение может получить "...", когда оно усечено. То же самое для длинных портов.
Мысли?
Некоторые хаки здесь: https://github.com/docker/docker/compare/master...bfirsh:7477-shorter-ps
@bfirsh Я думаю, ты что-то
Если вы измените статус (как вы сказали) на 23 секунды вместо 23 секунд и обрежете столбец изображений и портов, он должен быть достаточно коротким.
@bfirsh вы начинаете работать в представлении по умолчанию? Вы думаете о варианте --format
, о котором говорят некоторые люди?
Кроме того, мы могли бы использовать s
вместо sec
и m
вместо mins
@aanm у нас уже есть --format
в докере 1.8. Вы также можете изменить поведение ps по умолчанию в файле конфигурации клиента, добавив что-то вроде этого:
{
"psFormat": "table {{ .ID }}\\t{{ .Status }}"
}
Вы можете установить формат по умолчанию, который вам больше нравится.
Мне часто нужно увидеть текущее имя контейнера, чтобы запустить следующий docker exec
для подключения.
Итак, я надеюсь, что если я смогу переместить NAMES
после IMAGE
, это будет хорошо, мне больше не нужна какая-то конфигурация.
Спасибо.
Проблема в докере 1.8.1 (fc21)
--format не знает об именах контейнеров.
docker ps --format "{{.ID}}t{{.Image}}t{{.CreatedAt}}t{{.RunningFor}}t{{.Status}}t{{.Name}}" -a
Ошибка синтаксического анализа шаблона: шаблон: :1:64: выполнение "" в <.Name>: имя не является полем типа структуры *ps.containerContext
Пока использую:
докер пс-а | перл -не 'грызть; @cols = разделить /s{2,}/, $_; $name=поп @cols; printf "%-28s %-20s %-20s %-30sn", $name, $cols[1], $cols[3], $cols[4]'
@parf заполнитель на самом деле называется Names
:
спасибо @caiguanhao за вдохновение.
я просто оставлю это здесь:
IMAGE NAMES STATUS PORTS
xxxxx:x.x xx_xxxxxxxx_xxxxx Up About an hour 10.23.123.111:26002->6379/tcp
xxxxxxxxx:x.x xx_xxxxxxxx_xxxxxxxxx Up About an hour 29015/tcp
10.23.123.111:26001->8080/tcp
10.23.123.111:26000->28015/tcp
xxxxxxxx_xx_xxxxxxxx xx_xxxxxxxx Up About an hour 127.0.0.1:8086->8080/tcp
xxxxxx_xx xx_xxx_xxx Up About an hour 127.0.0.1:8082->8888/tcp
xxx_xx xx_xxx Up About an hour 127.0.0.1:8083->8080/tcp
xxxx/xxxxxxxxx-xxxxxx xx_xxx_xxxxxxxxx_xxx Up 2 hours 10.23.123.111:25002->25565/tcp
xxxx/xxxxxxxxx-xxxxxx xx_xxx_xxxxxxxxx_xxxxxx Up 2 hours 10.23.123.111:25001->25565/tcp
xxxxxx/xxxxxxxx:xxxxxx xxx_xxxxxxxx Up 3 hours 127.0.0.1:8080->8080/tcp
xxxxxxxxxx/xxxxxxx xxx_xxxxxxx Up 3 hours 10.23.123.111:25->25/tcp
10.23.123.111:587->587/tcp
xx_xxx xx_xx Up 3 hours 10.23.123.112:9987->9987/tcp
10.23.123.112:10011->10011/tcp
10.23.123.112:30033->30033/tcp
10.23.123.112:9987->9987/udp
xxxx.xx/xxxxxxxxx/xxxxxx:x.x.x xxx_xxxxxx Up 3 hours 10.42.241.123:22->22/tcp
443/tcp
127.0.0.1:8000->80/tcp
xxxxxx/xxxxxx-xxxxxx:xxxxxx xxx_xxxxxx_xx_xxxxxx Up 3 hours
xxxx.xx/xxxxxxxxx/xxxxxxxxxx:x.x-x xxx_xxxxxx_xxxxxxxx Up 3 hours 5432/tcp
xxxx.xx/xxxxxxxxx/xxxxx:xxxxxx xxx_xxxxxx_xxxxx Up 3 hours 6379/tcp
/etc/profile.d/dps.sh: https://gist.github.com/GottZ/4a6c2af314d73cd8b71d
Хорошо @GottZ , спасибо, что поделились!
@thaJeztah я только что
Между тем, мой подход с awk
:
$ alias my_docker_ps="docker ps | awk 'BEGIN{FIELDWIDTHS = \"20 33 23 20 20 70 20\"}{print \$1,\$2,\$5,\$7}'"
$ my_docker_ps
CONTAINER ID IMAGE STATUS NAMES
b83fe9a6a06e kibana Up 32 minutes kibana
4d78b9cd2bed elasticsearch Up About an hour evil_feynman
fbbc40a49569 mattermost/platform Up 9 weeks mattermost-dev
3b4dd9d00305 outcoldman/splunk:latest Up 9 weeks boring_yalow
@danidelvalle, почему бы и нет;
docker ps --format "table {{.ID}}\t{{.Image}}\t{{.Status}}\t{{.Names}}"
Это уже было зафиксировано и выпущено. Я не понимаю, почему это все еще открыто?
@thaJeztah , ты прав, спасибо :)
@ovidiub13 в основном из-за https://github.com/docker/docker/issues/7477#issuecomment -123898874
да это раздражает..
Обычно я просто усекаю значение ps по умолчанию по ширине столбца терминала:
dps() {
docker ps | cut -c-$(tput cols)
}
+1 за --columns=name,id,status,image
Эта проблема все еще существует, к сожалению. В любом случае обходной путь заключается в том, чтобы поместить нижеприведенное (проверено в Ubuntu) в ваш .bashrc
:
CMD_WATCHDOCKER="watch \"docker ps -q | xargs docker inspect --format '{{.Id}} @{{.Config.Image}} @{{.Config.Cmd}} @{{range \\\$p, \\\$conf := .NetworkSettings.Ports}}{{\\\$p}}->{{(index \\\$conf 0).HostPort}}{{end}} @{{.NetworkSettings.IPAddress}}' | column -t -s='@' | cut -c 1-5,64-\""
alias watchdocker='eval $CMD_WATCHDOCKER'
Запуск watchdocker
дает:
4596c3 ruby:2.2.2 [bash] 172.17.0.82
827ca9 postgres [postgres] 5432/tcp->5432 172.17.0.72
@Pithikos docker ps--format '{{ .ID }}\t{{ .Image }}\t{{ .Command }}\t{{ .Ports }}'
даст вам это без выполнения всех этих вызовов API для каждого контейнера.
Также вы можете поместить это в ~/.docker/config.json
чтобы сделать его форматом по умолчанию.
@ cpuguy83 какая версия поддерживает это? Мне никогда не удавалось заставить это работать, ни на работе, ни дома. Было бы круто, если бы в документах было указано какая версия какую поддерживает.
@Pithikos Либо 1,8, либо 1,9, не уверен.
подогнать docker ps/images до 80 столбцов
правильное использование с ключевым словом «таблица» в строке формата, это даст вам хорошее форматирование с интервалом docker ps -a --format="table {{.ID}}\t{{.Names}}\t{{.Image}}\t{{.Command}}\t{{.Status}}"
Я закрываю это, так как кажется, что флаг --format
для ps
решает проблему. Спасибо всем!
Эта проблема, возможно, не была хорошо названа. По-прежнему остается, что _default_ для команд должно иметь ширину 80 символов. Рад, что это закрыли, потому что это не так важно.
--format
кажется недостаточно хорошим.
https://docs.docker.com/engine/reference/commandline/ps/#/formatting
как насчет добавления опции, чтобы результат отображался вертикально, например, select * from foobar\G
в MySQL
Обычно я просто хочу знать, какие контейнеры работают (и как долго).
Это помогает мне:
$ docker ps --format "table {{.Names}}\t{{.Status}}"
Более того, я обернул его действительно легко запоминающимся псевдонимом:
alias dps='docker ps --format "table {{.Names}}\t{{.Status}}"'
Вот пример вывода:
NAMES STATUS
projectxyz_chrome_1 Up 11 minutes
projectxyz_web_1 Up 11 minutes
projectxyz_app_1 Up 11 minutes
projectxyz_phpmyadmin_1 Up 11 minutes
projectxyz_memcached_1 Up 11 minutes
projectxyz_db_1 Up 11 minutes
Вы можете узнать больше о команде --format
здесь:
https://docs.docker.com/engine/reference/commandline/ps/
Надеюсь кому-нибудь поможет 😃
@joshmedeski вы также можете сохранить предпочтительное форматирование в файле конфигурации, чтобы оно использовалось по умолчанию; https://docs.docker.com/engine/reference/commandline/cli/#/configuration -files
В духе экономии нажатий клавиш вот небольшой скрипт bash, который я написал, чтобы получить список аргументов, построить строку шаблона go и выполнить команду docker ps, чтобы немедленно отобразить любые столбцы, которые требуются в любом порядке. Помещение конфигурации в файл недостаточно динамично — я считаю, что иметь один набор столбцов в один момент и другой набор через мгновение очень полезно. Скрипт здесь , надеюсь кому-нибудь пригодится. Ура -Энди
#!/usr/bin/env python2
# -*- coding: utf-8 -*-
import subprocess
show_all = False
fields = [
"Names",
"Command",
"Image",
"CreatedAt",
"Status",
]
cmd = ['docker', 'ps']
if show_all:
cmd += ['-a']
cmd += ['--format', '\t'.join([('{{ .'+field+' }}') for field in fields])]
response = subprocess.check_output(cmd)
dataset = [fields]
dataset_widths = [0] * len(fields)
for idx, line in enumerate(response.split('\n')[:-1]):
fieldvalues = line.decode('utf-8').replace(u"\u2026", u"_").split('\t')
dataset.append(fieldvalues)
for jdx, fieldvalue in enumerate(fieldvalues):
if dataset_widths[jdx] < len(fieldvalue):
dataset_widths[jdx] = len(fieldvalue)
for idx, items in enumerate(dataset):
output_line = ['{:>3d}'.format(idx)]
for jdx, item in enumerate(items):
output_line.append(('{:'+str(dataset_widths[jdx])+'s}').format(item))
print ' '.join(output_line)
поместите это в свой ~/.docker/config.json
{
"psFormat": "table {{.Names}}\\t{{.Image}}\\t{{.RunningFor}} ago\\t{{.Status}}\\t{{.Command}}",
"imagesFormat": "table {{.Repository}}\\t{{.Tag}}\\t{{.ID}}\\t{{.Size}}"
}
И модифицировать на свое усмотрение. Для меня проблемой всегда было длинное имя изображения (поскольку оно содержало имя моего личного репозитория для моих пользовательских изображений)
всем, кто ищет лучший docker ps, следует проверить это:
https://github.com/moncho/сухой
Обходной хак. Измените, какие $cols[x] вы хотите сохранить по желанию.
docker ps | perl -ne '<strong i="7">@cols</strong> = split /\s{2,}/, $_; printf "%30s %20s %20s\n", $cols[1], $cols[3], $cols[4]'
Спасибо.
Это было все, что мне было нужно:
docker ps | perl -ne '<strong i="12">@cols</strong> = split /\s{2,}/, $_; printf "%30s %20s %20s", $cols[1], $cols[4], $cols[6]'
присвоение имён статуса изображения
в хорошо выровненных столбцах
РЕДАКТИРОВАТЬ
лучше создать псевдоним bash примерно так:
docker ps --format="table {{.Image}}\t{{.Status}}\t{{.Ports}}\t{{.Names}}"
Обратите внимание на формат «таблица».
Обходной хак. Измените, какие $cols[x] вы хотите сохранить по желанию.
docker ps | perl -ne '<strong i="7">@cols</strong> = split /\s{2,}/, $_; printf "%30s %20s %20s\n", $cols[1], $cols[3], $cols[4]'
Это круто, спасибо
@nagracks, если вы хотите использовать этот формат по умолчанию, я бы рекомендовал использовать подход --format
(который можно сохранить в вашем файле конфигурации ~/.docker/config.json
)
Если я изменю свой файл .docker/config.json
на что-то вроде этого:
"imagesFormat": "table {{.ID}} {{.Repository}}\t{{.Tag}} {{.CreatedSince}} {{.Size}}",
"psFormat": "table {{.ID}} {{.Names}}\t{{.Image}} {{.Command}} {{.Status}}",
Как я могу использовать команду docker ps
для просмотра формата по умолчанию? Я пробовал docker ps --format ""
, но все равно использовал конфиг.
Использование docker ps --format=table
должно дать формат таблицы по умолчанию.
Я был бы очень признателен, если бы по умолчанию была доступна менее подробная версия вывода, без необходимости помнить, что такое синтаксис форматирования таблицы или каковы имена переменных в контексте форматирования. Даже если значение по умолчанию будет сохранено как есть, флаг для _предварительно отформатированной_ менее подробной версии будет полезен.
Что касается того, какую информацию можно было бы сократить из менее подробной версии, вот мои два цента:
В моем случае использования я обычно просто хочу найти имя контейнера, для которого я буду запускать некоторые другие команды (например, на удаленном узле сервера), и вывод, заключенный в несколько строк, затрудняет поиск точное имя интересующего меня контейнера.
Я несколько разочарован «одобренным» решением здесь: «просто настройте псевдоним с параметром --format», как если бы вы всегда выполняли эти команды в средах, где у вас определен ваш псевдоним, или помните синтаксис форматирования и контекстные переменные.
Я все еще ежедневно сталкиваюсь с этой проблемой, FWIW. Мой текущий вывод docker ps -a
составляет _180 символов в ширину_ — больше половины моего 27-дюймового экрана 4K!
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
994be99dddd1 nvidia/cuda:10.2-devel-ubuntu18.04 "bash" 4 days ago Exited (0) 4 days ago eager_tesla
30796cc3db32 nvidia/cuda:10.2-devel-ubuntu18.04 "bash" 4 days ago Exited (127) 4 days ago laughing_maxwell
ed5f20c1cff3 gcr.io/deeplearning-platform-release/tf2-gpu "/entrypoint.sh bash" 4 days ago Exited (0) 3 days ago distracted_ardinghelli
0bb06e992ef4 gcr.io/deeplearning-platform-release/tf2-gpu "/entrypoint.sh bash" 4 days ago Exited (0) 4 days ago bold_brahmagupta
Не следует ожидать, что средний пользователь будет использовать псевдоним своей команды docker ps
только для того, чтобы сделать ее читаемой на терминале разумного размера. Возможно, он не должен быть меньше 80 символов, но точно не должен быть 180 символов.
У меня возникает соблазн открыть запрос на вытягивание в качестве соломенного человека. 😏
Самый полезный комментарий
Что не так с конвейером на пейджер?