必须用docker images -a查全部镜像(含虚悬镜像),因默认docker images不显示<none>镜像;删镜像前须用docker ps -a和docker inspect确认是否被容器引用,否则docker rmi会报冲突错误。

docker 命令不是“背下来就能用”,而是得知道**什么场景下必须用哪个、参数漏了会卡在哪、删错镜像或容器根本停不掉服务**。下面按真实使用频率和踩坑密度整理,直接说清怎么做、为什么、容易错哪。
怎么查本地到底有哪些镜像?别只用 docker images
默认 docker images 只显示带标签的镜像,但构建失败或中间层残留的 <none> 镜像(虚悬镜像)会悄悄占空间,且 docker system prune 默认不清理它们。
- 查全部镜像(含虚悬):
docker images -a - 只看镜像 ID(方便批量操作):
docker images -q - 专查虚悬镜像:
docker images --filter "dangling=true" - 想确认某个镜像是否被容器引用:先
docker ps -a,再docker inspect 容器ID | grep Image
常见错误:直接 docker rmi $(docker images -q) 会报错“conflict: unable to remove repository reference”,因为有容器正用着这些镜像 —— 必须先 docker stop 和 docker rm 对应容器,或加 -f 强制删(但不推荐)。
docker run 启动容器时,端口映射和数据卷挂载最容易写反
-p 和 -v 的顺序和方向是高频翻车点。宿主机端口在前,容器端口在后;宿主机路径在前,容器内路径在后。
- 正确写法:
docker run -d -p 8080:80 -v /data/nginx:/usr/share/nginx/html nginx - 写反后果:
-p 80:8080→ 宿主机 80 端口映射到容器 8080,但容器里 nginx 默认监听 80,结果访问不到;-v /usr/share/nginx/html:/data/nginx→ 把容器内目录覆盖成空目录,静态文件全丢 - 挂载前确认宿主机路径存在:
mkdir -p /data/nginx,否则 Docker 会自动创建但权限可能不对(尤其在 CentOS 上常导致 403) - 想让容器随系统启动:
--restart=always,但别忘了配systemctl enable docker,否则 Docker 服务自己没开机自启,容器也起不来
容器停不掉、删不掉?先看 docker ps -a 和 docker inspect
docker stop 卡住、docker rm 报 “container is in use” 是典型状态混乱信号,不是命令失效,而是你没看清容器当前状态或依赖关系。
-
docker ps -a必须加-a,否则看不到已退出的容器(它们仍占资源,且阻塞镜像删除) - 查容器具体状态:
docker inspect 容器ID | jq '.State.Status'(需装jq)或直接看输出里的"Status": "exited"或"running" - 强制终止:
docker kill 容器ID(发 SIGKILL),比stop更快,但会丢数据;stop默认等 10 秒优雅退出,超时才 kill - 删容器前确认无依赖:
docker volume ls -f "dangling=true"查孤立数据卷,docker network inspect bridge看是否还连着网络
镜像导出迁移时,save 和 load 不等于 export 和 import
离线环境传镜像,90% 人混淆这两组命令。前者保完整镜像层和元数据(含 tag、历史),后者只导出容器文件系统(无 layer、无 history、无 tag)。
- 安全迁移镜像:
docker save -o nginx.tar nginx:alpine→docker load -i nginx.tar -
docker export出来的是 tar 包,docker import导入后生成的是新镜像,但丢失所有构建信息(docker history为空),且默认 tag 是none:none - 导入后记得打 tag:
docker tag 新镜像ID nginx:alpine,否则docker run会报 “Unable to find image” - 跨平台迁移注意:ARM 镜像不能直接在 x86 宿主机
load启动,即使命令成功,运行时会报exec format error
真正麻烦的从来不是命令记不住,而是不知道哪一步断了链路 —— 比如删镜像前没查容器引用、导出镜像用了 export 却指望它保留 tag、-v 路径写反导致配置文件消失。这些点不提前踩一遍,光背命令列表没用。


















