我尝试使用此命令列出大小小于 10MB 的 Docker 映像:
> docker images --format '{{.Repository}}:{{.Tag}}\t{{.Size}}' | awk '{ if ($2 < "10MB") print $0 }'
registry.cn-hongkong.aliyuncs.com/reddwarf-pro/chat-server:ac9b7e52b86a5c86fdd7b613a211e33247018ad3 1.84GB
cruise-radar:latest 1.11GB
busybox:latest 1.41MB
rust:1.54-bullseye 1.5GB
似乎它没有按预期工作。我错过了什么吗?
答案1
正如 @JaromandaX 在评论中提到的,问题在于docker images
产生人类可读的大小信息,如10MB
或1.1GB
。
虽然可以通过解析后缀并将其全部转换为字节来转换这些值,但还有另一种选择:您可以直接与 Docker API 交互,而不是使用命令docker images
;这里的优点是 API 报告图像大小以字节为单位,因此不需要转换。
使用curl
:
curl --unix-socket /var/run/docker.sock http://localhost/images/json |
jq -r '.[]|select(.Size < 10485760)|[.RepoTags[0], .Size]|@tsv'
在我的系统上,这会产生如下内容:
serjs/go-socks5-proxy:latest 4675775
chedched/foo:latest 7282688
cilium/pwru:latest 4263936
alpinelinux/darkhttpd:latest 5618779
traefik/whoami:latest 6508005
alpine:latest 5544164
containous/whoami:latest 7373346
.
.
.