Docker CLI - docker image prune

本文介绍如何使用Docker的image prune命令来清理系统中未使用的映像,包括悬空映像和未被容器引用的映像。通过指定选项,如--all和--force,可以增强清理过程。文章还提供了使用过滤器 (--filter) 来进一步细化要删除的映像条件的方法。

描述

删除未使用的映像

API 1.21+要使用此命令,客户端和守护进程API都必须至少是 1.21 。

在客户端上使用 docker version 命令检查客户端和守护进程API版本。

用法

docker image prune [OPTIONS]

选项

名字,速记默认描述
--all , -a Remove all unused images, not just dangling ones -----删除所有未使用的映像,而不仅仅是悬空映像
--filter Provide filter values (e.g. ‘until=') -----提供过滤值(例如'until =“)
--force , -f Do not prompt for confirmation -----不要提示确认

扩展说明

删除所有悬空映像。如果-a指定,还将删除任何容器未引用的所有映像。

例子

示例输出:

$ docker image prune -a

WARNING! This will remove all images without at least one container associated to them.
Are you sure you want to continue? [y/N] y
Deleted Images:
untagged: alpine:latest
untagged: alpine@sha256:3dcdb92d7432d56604d4545cbd324b14e647b313626d99b889d0626de158f73a
deleted: sha256:4e38e38c8ce0b8d9041a9c4fefe786631d1416225e13b0bfe8cfa2321aec4bba
deleted: sha256:4fe15f8d0ae69e169824f25f1d4da3015a48feeeeebb265cd2e328e15c6a869f
untagged: alpine:3.3
untagged: alpine@sha256:4fa633f4feff6a8f02acfc7424efd5cb3e76686ed3218abf4ca0fa4a2a358423
untagged: my-jq:latest
deleted: sha256:ae67841be6d008a374eff7c2a974cde3934ffe9536a7dc7ce589585eddd83aff
deleted: sha256:34f6f1261650bc341eb122313372adc4512b4fceddc2a7ecbb84f0958ce5ad65
deleted: sha256:cf4194e8d8db1cb2d117df33f2c75c0369c3a26d96725efb978cc69e046b87e7
untagged: my-curl:latest
deleted: sha256:b2789dd875bf427de7f9f6ae001940073b3201409b14aba7e5db71f408b8569e
deleted: sha256:96daac0cb203226438989926fc34dd024f365a9a8616b93e168d303cfe4cb5e9
deleted: sha256:5cbd97a14241c9cd83250d6b6fc0649833c4a3e84099b968dd4ba403e609945e
deleted: sha256:a0971c4015c1e898c60bf95781c6730a05b5d8a2ae6827f53837e6c9d38efdec
deleted: sha256:d8359ca3b681cc5396a4e790088441673ed3ce90ebc04de388bfcd31a0716b06
deleted: sha256:83fc9ba8fb70e1da31dfcc3c88d093831dbd4be38b34af998df37e8ac538260c
deleted: sha256:ae7041a4cc625a9c8e6955452f7afe602b401f662671cea3613f08f3d9343b35
deleted: sha256:35e0f43a37755b832f0bbea91a2360b025ee351d7309dae0d9737bc96b6d0809
deleted: sha256:0af941dd29f00e4510195dd00b19671bc591e29d1495630e7e0f7c44c1e6a8c0
deleted: sha256:9fc896fc2013da84f84e45b3096053eb084417b42e6b35ea0cce5a3529705eac
deleted: sha256:47cf20d8c26c46fff71be614d9f54997edacfe8d46d51769706e5aba94b16f2b
deleted: sha256:2c675ee9ed53425e31a13e3390bf3f539bf8637000e4bcfbb85ee03ef4d910a1

Total reclaimed space: 16.43 MB

过滤

过滤标志(--filter)格式为“key = value”。如果有多个过滤器,则传递多个标志(例如--filter "foo=bar" --filter "bif=baz"

目前支持的过滤器是:

  • until(<timestamp>) - 仅删除在给定时间戳之前创建的映像
  • 标签(label=<key>label=<key>=<value>label!=<key>,或label!=<key>=<value>) -仅删除与映像(或没有,如果label!=...被使用)指定的标签。

until过滤器可以是Unix的时间戳,日期格式的时间戳,或持续时间字符串(例如,去10m1h30m)计算相对于守护机器的时间。支持的格式为日期格式时间戳包括RFC3339Nano,RFC3339, ,2006-01-02T15:04:052006-01-02T15:04:05.9999999992006-01-02Z07:002006-01-02。如果在时间戳结束时未提供a Z或 +-00:00时区偏移,则将使用守护程序上的本地时区。提供Unix时间戳时输入秒[.nanoseconds],其中秒是自1970年1月1日(午夜UTC / GMT)以来经过的秒数,不计算闰秒(也称为Unix纪元或Unix时间)和可选项。纳秒字段是一秒的一小部分,不超过九位数。

label过滤器接受两种格式。一个是label=...label=<key>label=<key>=<value>),它删除具有指定标签的映像。另一种格式是label!=...label!=<key>label!=<key>=<value>),它删除没有指定标签的映像。

预测将被删除的内容

如果使用正过滤(测试标签是否存在或标签是否具有特定值),则可以使用docker image ls相同的过滤语法查看哪些映像与过滤器匹配。

但是,如果使用的是负过滤(测试对于不存在标签的或标签并具有特定的值),这种类型的滤波器的不与工作docker image ls所以不能容易地预测哪些映像将被移除。此外,即使您正在使用,确认提示docker image prune 始终会警告所有悬空映像将被删除 --filter

以下删除之前创建的映像2017-01-04T00:00:00

$ docker images --format 'table {{.Repository}}\t{{.Tag}}\t{{.ID}}\t{{.CreatedAt}}\t{{.Size}}'
REPOSITORY          TAG                 IMAGE ID            CREATED AT                      SIZE
foo                 latest              2f287ac753da        2017-01-04 13:42:23 -0800 PST   3.98 MB
alpine              latest              88e169ea8f46        2016-12-27 10:17:25 -0800 PST   3.98 MB
busybox             latest              e02e811dd08f        2016-10-07 14:03:58 -0700 PDT   1.09 MB

$ docker image prune -a --force --filter "until=2017-01-04T00:00:00"

Deleted Images:
untagged: alpine:latest
untagged: alpine@sha256:dfbd4a3a8ebca874ebd2474f044a0b33600d4523d03b0df76e5c5986cb02d7e8
untagged: busybox:latest
untagged: busybox@sha256:29f5d56d12684887bdfa50dcd29fc31eea4aaf4ad3bec43daf19026a7ce69912
deleted: sha256:e02e811dd08fd49e7f6032625495118e63f597eb150403d02e3238af1df240ba
deleted: sha256:e88b3f82283bc59d5e0df427c824e9f95557e661fcb0ea15fb0fb6f97760f9d9

Total reclaimed space: 1.093 MB

$ docker images --format 'table {{.Repository}}\t{{.Tag}}\t{{.ID}}\t{{.CreatedAt}}\t{{.Size}}'

REPOSITORY          TAG                 IMAGE ID            CREATED AT                      SIZE
foo                 latest              2f287ac753da        2017-01-04 13:42:23 -0800 PST   3.98 MB

以下删除超过10天240h前创建的映像:

$ docker images

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
foo                 latest              2f287ac753da        14 seconds ago      3.98 MB
alpine              latest              88e169ea8f46        8 days ago          3.98 MB
debian              jessie              7b0a06c805e8        2 months ago        123 MB
busybox             latest              e02e811dd08f        2 months ago        1.09 MB
golang              1.7.0               138c2e655421        4 months ago        670 MB

$ docker image prune -a --force --filter "until=240h"

Deleted Images:
untagged: golang:1.7.0
untagged: golang@sha256:6765038c2b8f407fd6e3ecea043b44580c229ccfa2a13f6d85866cf2b4a9628e
deleted: sha256:138c2e6554219de65614d88c15521bfb2da674cbb0bf840de161f89ff4264b96
deleted: sha256:ec353c2e1a673f456c4b78906d0d77f9d9456cfb5229b78c6a960bfb7496b76a
deleted: sha256:fe22765feaf3907526b4921c73ea6643ff9e334497c9b7e177972cf22f68ee93
deleted: sha256:ff845959c80148421a5c3ae11cc0e6c115f950c89bc949646be55ed18d6a2912
deleted: sha256:a4320831346648c03db64149eafc83092e2b34ab50ca6e8c13112388f25899a7
deleted: sha256:4c76020202ee1d9709e703b7c6de367b325139e74eebd6b55b30a63c196abaf3
deleted: sha256:d7afd92fb07236c8a2045715a86b7d5f0066cef025018cd3ca9a45498c51d1d6
deleted: sha256:9e63c5bce4585dd7038d830a1f1f4e44cb1a1515b00e620ac718e934b484c938
untagged: debian:jessie
untagged: debian@sha256:c1af755d300d0c65bb1194d24bce561d70c98a54fb5ce5b1693beb4f7988272f
deleted: sha256:7b0a06c805e8f23807fb8856621c60851727e85c7bcb751012c813f122734c8d
deleted: sha256:f96222d75c5563900bc4dd852179b720a0885de8f7a0619ba0ac76e92542bbc8

Total reclaimed space: 792.6 MB

$ docker images

REPOSITORY          TAG                 IMAGE ID            CREATED              SIZE
foo                 latest              2f287ac753da        About a minute ago   3.98 MB
alpine              latest              88e169ea8f46        8 days ago           3.98 MB
busybox             latest              e02e811dd08f        2 months ago         1.09 MB

以下示例使用标签删除映像deprecated

$ docker image prune --filter="label=deprecated"

以下示例删除标签maintainer设置为的映像john

$ docker image prune --filter="label=maintainer=john"

此示例删除没有maintainer标签的映像:

$ docker image prune --filter="label!=maintainer"

此示例删除维护者标签未设置为的映像john

$ docker image prune --filter="label!=maintainer=john"

注意:在prune删除任何内容之前,系统会提示您进行确认,但不会显示可能删除的内容列表。此外,docker image ls不支持负过滤,因此很难预测实际将删除哪些映像

<think>我们正在处理用户关于VSCodeRemoteContainers命令失败的问题,具体是`devContainersSpecCLI.jsup`命令失败。根据用户提供的引用,我们将参考VSCode官方文档中的故障排除部分。用户引用了两个来源:[^1]:VSCode远程开发故障排除技巧,特别是配置基于密钥的认证部分。[^2]:关于安装Remote-Containers扩展以及使用容器的一些步骤,包括附加到正在运行的容器和通过scp传输文件,以及将Python程序打包成可执行文件(这部分可能不相关)。但是,用户当前的问题是`devContainersSpecCLI.jsup`命令失败,这通常发生在尝试启动开发容器时。根据VSCode官方文档的故障排除部分(引用[^1]),我们可以从以下几个方面进行排查:1.确保已安装必要的依赖:Docker引擎和VSCodeRemote-Containers扩展。2.检查Docker是否正在运行,并且用户有权限访问Docker守护进程。3.检查网络设置,特别是如果使用代理。4.查看日志文件以获取更详细的错误信息。另外,引用[^2]中提到了安装Remote-Containers扩展的步骤,但用户已经遇到命令失败,所以可能已经安装。因此,我们重点放在故障排除上。由于错误信息中提到了`devContainersSpecCLI.js`,这可能是VSCode在尝试解析或执行开发容器配置时出现的错误。开发容器配置通常定义在`.devcontainer.json`文件中。建议步骤:1.检查`.devcontainer.json`文件的语法是否正确。常见的错误包括JSON格式错误、无效的属性或值。2.确保在容器配置中指定的镜像或Dockerfile存在且正确。3.尝试运行简单的容器配置以排除配置复杂性的问题。此外,我们可以查看VSCode的日志来获取更多信息。在VSCode中,可以通过命令面板(F1)运行“Remote-Containers:ShowLog”来查看容器日志。根据引用[^1]中提到的故障排除,还应该检查:-确保Docker已安装并运行(在终端运行`dockerversion`应返回版本信息)。-确保用户有权限运行Docker(在Linux上,可能需要将用户加入docker组)。如果问题仍然存在,可以尝试重新安装Remote-Containers扩展。由于用户的问题描述比较简短,我们可能需要更多上下文,但以上是常见的解决步骤。现在,我们将按照用户的要求,生成相关问题。</think>### VS Code Remote Containers 命令失败问题排查指南 您在运行 `devContainersSpecCLI.js up` 时遇到的命令失败问题,通常与容器配置、依赖关系或权限相关。以下是系统化排查步骤: --- ### 1. **验证基础环境** - **Docker 状态检查**: ```bash docker version # 验证 Docker 安装 docker info # 检查守护进程状态 ``` 若返回权限错误,需将用户加入 `docker` 组: ```bash sudo usermod -aG docker $USER && newgrp docker ``` - **VS Code 扩展验证**: 确保已安装最新版 [Remote-Containers 扩展](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers) [^2]。在扩展面板搜索 `ms-vscode-remote.remote-containers` 确认版本号 ≥ 0.267.0。 --- ### 2. **关键故障点排查** #### ▶ 配置错误(常见于 `.devcontainer.json`) ```json // 典型错误示例 { "image": "node:alpine", // 镜像名拼写错误 "forwardPorts": [3000], "postCreateCommand": "npm install" // 依赖安装命令错误 } ``` **修复方案**: 1. 检查镜像/`Dockerfile`路径是否存在 2. 验证端口映射是否冲突 3. 使用 JSON 校验工具检查语法(如 [JSONLint](https://jsonlint.com/)) #### ▶ 网络问题 - **代理配置**: 在 VS Code 设置中 (`settings.json`) 添加: ```json "http.proxy": "http://proxy.example.com:8080", "remote.containers.dockerEnv": [ "HTTP_PROXY=http://proxy.example.com:8080", "HTTPS_PROXY=http://proxy.example.com:8080" ] ``` #### ▶ 文件权限 在 Linux/macOS 上执行: ```bash chmod -R 755 .devcontainer # 确保配置目录可读 ``` --- ### 3. **日志诊断** 1. 打开 VS Code 命令面板 (`Ctrl+Shift+P`) 2. 运行 `Remote-Containers: Show Log` 3. 重点关注包含 `devContainersSpecCLI.js` 和 `ERR` 的条目 **典型日志分析**: ``` [2023-10-01T12:34:56Z] ERROR: Failed to build image: → Dockerfile not found in /workspace/.devcontainer (ERR_CODE: 404) [2023-10-01T12:35:10Z] ERROR: postCreateCommand failed: → /bin/sh: npm: command not found ``` --- ### 4. **高级修复** 若上述步骤无效: 1. **重置开发容器**: ```bash docker rm -f $(docker ps -aq) # 删除所有容器 docker system prune -a # 清除缓存 ``` 2. **重装扩展**: - 卸载 Remote-Containers 扩展 - 删除 `~/.vscode/extensions/ms-vscode-remote.remote-containers-*` - 重新安装扩展 3. **降级 Docker Desktop**: 某些版本存在兼容性问题(如 Docker 4.25+ 与旧版 VS Code),可暂时回退到 [Docker 4.24](https://docs.docker.com/desktop/release-notes/#4240)。 --- ### 5. **替代启动方式** 通过 CLI 直接启动容器调试: ```bash docker build -t my-dev-env -f .devcontainer/Dockerfile . docker run -it --rm -v $(pwd):/workspace my-dev-env ``` 成功启动后,在 VS Code 中使用 **Attach to Running Container** [^2] 功能连接。 --- ### 引用来源 [^1]: VS Code 官方容器故障排除指南:包括网络配置、权限管理等核心解决方案 [Visual Studio Code Remote Development Troubleshooting](https://code.visualstudio.com/docs/remote/troubleshooting#_configuring-key-based-authentication) [^2]: Remote-Containers 扩展文档:涵盖扩展安装、容器附加操作等关键步骤 [Remote-Containers Extension Marketplace](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Thomas Kant

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值