docker ps
输出在 80 个字符宽的终端上很难阅读。
/bin/ps
在窄终端上包装输出方面做得非常好(例如,将重要信息放在首位,命令放在最后并截断它)。 我想知道我们是否可以做得更好。
如此多的爱和许多+1。 我使用 80x24 终端(令
我的同事),这个对我来说是一个小刺激
时间。
我不得不说这也经常让我着迷。
任何解决方案的想法? 在较窄的终端上安装较小的版本听起来不错。
嗯,ID 并不真的需要在那里。
这个怎么样:
NAME IMAGE STATUS PORTS COMMAND
prickly_perlman ubuntu:14.04 Up 15s 8000->8000/tcp sleep 30000
解释:
/bin/ps
@bfirsh :thumbsup:
--no-trunc
怎么办,现在容器 ID 不再可见? 存在许多依赖此功能来清除已停止容器的示例--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
_is_ 很重要,可以快速检查我的容器是否仍然运行良好或发出“whoopsie”。
我不确定这是否应该成为 ps 输出的大型重新实现,或者 _start_ 在默认情况下使其更清洁并以此为基础,通过添加选项来指定要显示的列、排序顺序使其更易于配置和过滤。
@nathanleclaire ,一旦您进入less
,只需使用箭头键,您就可以访问全部内容。 还是我误会你了?
@grahamc为什么不呢,我个人更喜欢不自动做这些事情的工具。 如果需要的话,总是可以为这个 IMO 定义一个 shell 别名。
@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。 我正在处理的系统的一次运行启动了 17 个容器——由于 31 个依赖关系,这些容器总共有 _387 个名称_。 无论我的终端窗口有多宽,如果没有寻呼机, docker ps
的输出都是不可读的。 名称的数量在容器数量中_比二次方_更差真的有意义吗? 如果有一种方法可以禁用这种迂腐的枚举级别,那至少会很好。
@mraccident :+1: docker ps
应该只显示主名称,而不是该容器的所有名称
Salut,这也困扰着我,我只是在 docker 中添加了一个“--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.
$
由于我是新手,我想我的代码可能会......优化......
但令人惊讶的是,作为一个长达一年的 python 人,更改代码是多么容易。 我喜欢!
编辑:也许可以获取终端的大小并踢出列以缩短行...
EDIT2:我缩短了名称并添加了一个计数(儿童),即使它有点误导,因为它也计算 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
例如,通过使用columname:width :modifier、 columname:width :modifier 设置环境变量DOCKER_PS_FORMAT
来允许提供模板怎么样?
其中modifier
可能允许其他设置,例如no-trunc
、 full
(例如用于容器 ID)或short
for CREATED
where ~1h
可以是About an hour ago
的简写形式。
我在~/.bashrc
编写了这个 bash/zsh 函数以更好地显示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好点,不,它不会改变默认值。 但是我不确定我们是否可以在 v2 之前更改默认值(如果/何时),因为如果我们这样做了,我们会破坏现有的客户端。
同样在这里。 也许一些智能机制通过将阈值应用于 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 模板的输出,但它几乎是无限可配置的。
@jafcrocker不错。 也许我们可以制定一个公开的要点来保留一系列像这样的解决方法? 直到我们得到一些标志来正确地自定义输出......
我们刚刚合并了 #14699,它允许您运行docker ps --format ...
来更改 ps 输出。 如果需要,您还可以设置默认格式,请查看此屏幕截图:
我将按已修复的方式关闭此问题。 请随时尝试一下,让我们知道您的想法。
对于那些想要尝试的人,可以在https://master.dockerproject.org找到“主”构建,这个功能应该很快就会出现(如果还没有的话)
虽然--format
是一个非常好的补充,但我认为这并不能解决主要问题。 我每天使用的几乎所有命令行工具都能正确处理可变大小的终端。 大多数通过查看$COLUMNS
环境变量并显示适当的文本。
例如, ps aux
在 80x24 终端中:
在 137x24 终端中:
它改变了列宽并缩短了命令,所以一切都很好地放在一行中。 一切都是为了可读性和易于人类解析。
当然,我可以编写一个 bash 包装器,它将根据$COLUMNS
应用不同的格式选项,但它开始听起来真的很hacky,我认为这应该是任何命令行程序的默认行为。 很抱歉,docker 的输出很乱,很难阅读。
没有这样做是有原因的吗? 某些库中的任何限制或您的决定? 需要知道这是否值得考虑在 PR 中修复,或者,也许我在找错树。
@nsg :同意-默认输出仍然可以改进。
这个问题有更新吗?
因此,无论出于何种原因,图像散列不再在 ps 输出中被截断。 我已经不得不让我的终端超宽(占据整个屏幕)只是为了让 docker 在过去可用,现在这已经不够了。 从 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
也许?
尽管可以缩短命令,但我们还需要缩短其他任何内容以确保至少显示 _some_ 的命令。 不能缩短名字。 当图像被截断时,它可能会得到一个“...”。 长端口也一样。
想法?
一些技巧在这里: https://github.com/docker/docker/compare/master...bfirsh :7477-shorter-ps
@bfirsh我认为您正在做某事。
如果您将状态(如您所说)更改为 23 秒而不是 23 秒并截断图像和端口列,它应该足够短。
@bfirsh您开始在默认视图中工作了吗? 您是否在考虑某些人正在谈论的--format
选项?
此外,我们可以使用s
代替sec
和m
代替mins
@aanm我们在--format
。 您还可以更改客户端配置文件中的默认 ps 行为,添加如下内容:
{
"psFormat": "table {{ .ID }}\\t{{ .Status }}"
}
您可以使用您更喜欢的格式设置默认值。
我经常需要查看当前容器名称,以便运行下一个docker exec
来附加。
所以,我希望如果可以在NAMES
之后移动IMAGE
,它会很好,我不再需要一些配置了。
谢谢。
docker 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 的字段
到目前为止使用:
码头工人ps -a | perl -ne 'chomp; @cols = 拆分 /s{2,}/, $_; $name=pop @cols; printf "%-28s %-20s %-20s %-30sn", $name, $cols[1], $cols[3], $cols[4]'
感谢@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我只是将每条偶数行加粗以提高可见度。 玩得开心:smile:
同时,我使用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 列
正确的用法是在格式字符串中使用“table”关键字,这将为您提供很好的间隔格式docker ps -a --format="table {{.ID}}\t{{.Names}}\t{{.Image}}\t{{.Command}}\t{{.Status}}"
我要关闭这个,因为ps
的--format
标志似乎正在解决这个问题。 谢谢大家!
这个问题可能没有很好地命名。 命令的 _default_ 仍然应该是 80 个字符宽。 很高兴关闭它,因为它不是那么重要。
如何添加选项以使结果垂直显示,如 MySQL 中的select * from foobar\G
我通常只想知道哪些容器正在运行(以及运行了多长时间)。
这对我有用:
$ 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
#!/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/dry
解决方法黑客。 根据需要修改要保留的 $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]'
太棒了,thnx
@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
应该给出默认的表格格式
如果默认情况下有一个不太详细的输出版本,我将不胜感激,而不必记住表格格式化语法是什么或格式化上下文中的变量名是什么。 即使默认保持原样,_pre-formatted_ 不太详细的版本的标志也会很有用。
至于可以从不太冗长的版本中减少哪些信息,这是我的两分钱:
在我的用例中,我通常只想查找要运行其他一些命令的容器的名称(例如,在远程服务器节点上),并且将输出包裹在多行中使得很难找出我感兴趣的容器的确切名称。
我有点失望这里的“批准”解决方案是“只需使用 --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 个字符。
我很想以稻草人的身份打开拉取请求。 😏
最有用的评论
用管道连接到寻呼机有什么问题?