发出docker container ls -la命令时,输出如下所示:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a67f0c2b1769 busybox "tail -f /dev/null" 26 seconds ago Up 25 seconds recursing_liskov
Run Code Online (Sandbox Code Playgroud)
我只想获取列中存在的容器名称Names。
我的想法是使用 bash 反转命令输出中的列,以便将该Names列置于第一个位置并剪切容器的名称。
这是我尝试过的:
sudo docker container ls -la | rev |tail -n +2 | tr -s ' ' | cut -d ' ' -f 1
Run Code Online (Sandbox Code Playgroud)
然而,这并没有给出预期的结果,并且我收到以下错误:
rev: stdin: Invalid or incomplete multibyte or wide character
Run Code Online (Sandbox Code Playgroud)
我被困住了,因为我不知道如何处理这个错误。可以修复以获得我期望的结果吗?或者还有其他方法可以获得我的结果吗?
Zei*_*tor 16
不要使用默认输出,只需从一开始就准确打印您要查找的内容即可。大多数 docker 子命令接受一个--format选项,该选项将采用go 模板表达式来指定您确切想要的内容。
就您而言,我相信以下命令应该给出您正在寻找的内容:
$ docker container ls -la --format "{{.Names}}"
recursing_liskov
Run Code Online (Sandbox Code Playgroud)
当然,如果您愿意,您可以按照最适合您需求的顺序添加更多列。您可以轻松获取所有可用键的列表,例如:
$ docker container ls -la --format "{{json .}}" | jq
{
"Command": "\"tail -f /dev/null\"",
"CreatedAt": "2022-01-15 23:43:54 +0100 CET",
"ID": "a67f0c2b1769",
"Image": "busybox",
"Labels": "",
"LocalVolumes": "0",
"Mounts": "",
"Names": "recursing_liskov",
"Networks": "bridge",
"Ports": "",
"RunningFor": "20 minutes ago",
"Size": "0B (virtual 1.24MB)",
"State": "running",
"Status": "Up 20 minutes"
}
Run Code Online (Sandbox Code Playgroud)
下面是一个示例,仅用于说明某些字段的使用:
$ docker container ls -la --format "container {{.Names}} is in state {{.State}} and has ID {{.ID}}"
container recursing_liskov is in state running and has ID a67f0c2b1769
Run Code Online (Sandbox Code Playgroud)
我使用的一些随机参考:
| 归档时间: |
|
| 查看次数: |
1802 次 |
| 最近记录: |