导读:本期聚焦于孙悟空创作的《Docker基本命令是什么?常用命令与常见误区一次讲清》,敬请观看详情。执行docker run -d nginx之后端口不通,容器列表里也看不到进程,这类问题很少是Docker本身故障,多半是对基本命令的运行方式理解不到位。Docker命令表面上是操作容器,实际在跟镜像、容器可写层、网络和卷几类资源打交道。本文把Docker基本命令拆成镜像管理、容器生命周期、日志调试和文件拷贝四类,结合可直接执行的示例解释每条命令做了什么、常用参数怎么选。同时重点提醒几个常见误区,包括前台与后台运行的区别、端口映射顺序、容器退出后的数据保留、docker exec和docker attach的使用场景。读完可以形成一套可复用的命令与排障顺序,遇到容器启动失败、端口不通或文件丢失时,知道先查状态、再查日志,然后核对端口和挂载路径,减少无效重启和盲目删除操作。

Docker基本命令看起来只是一堆以docker开头的指令,但真正上手后会发现,容器起不来、端口连不通、改完文件重启就丢,这些问题经常不是Docker本身不稳定,而是对命令的执行位置、参数顺序和生命周期理解有偏差。Docker CLI本质上是把用户输入转换成对Docker守护进程的API调用,所以每条命令背后都对应着镜像仓库、存储驱动、网络模式等一组动作。把这层关系搞清楚,再记命令就会顺很多。

Docker基本命令是什么?常用命令与常见误区一次讲清

一、先理解Docker基本命令在操作谁

Docker采用客户端-服务端架构,本地执行docker命令时,命令客户端会连接本机或远程的dockerd。很多人把docker命令当成直接操作容器的工具,其实它只是向守护进程发请求。理解这一点后再看命令输出会清晰很多,例如docker version能同时显示客户端和服务端版本,docker info能查看存储驱动、镜像数量、容器状态等。当怀疑守护进程异常时,这两条命令是最初的判断依据。

docker version
docker info
docker system df

其中docker system df专门用于查看镜像、容器、卷占用的磁盘空间,适合在宿主机磁盘告急时快速定位是哪一类资源膨胀。基本命令通常分为四类:镜像管理、容器生命周期、日志与调试、数据卷和网络。镜像管理围绕docker images、docker pull、docker rmi;容器生命周期围绕docker create、start、stop、restart、rm;调试则常用docker ps、logs、exec、inspect。不要只记docker run,因为run其实是create加start的组合,理解拆分过程有助于定位问题。

举一个简单场景:如果希望先创建容器、确认配置无误后再启动,可以先执行docker create,再执行docker start。大多数日常操作里docker run最方便,因为它一次完成拉取镜像、创建可写层、分配网络、启动进程这些动作。但一旦容器启动失败,拆开这些动作逐个排查反而更有效。比如镜像没拉下来、端口被占用、挂载路径不存在,它们的报错阶段和提示信息并不相同。

二、高频命令与参数该怎么用

docker run是参数最多的命令之一。最常用组合包括:-d表示后台运行,--name指定容器名字,-p映射端口,-v挂载数据卷,--restart设置重启策略。参数顺序并没有严格限制,但镜像名必须写在最后,后面跟的是容器启动后要执行的命令。有些人把命令写到镜像名后面导致解析错误,这是很常见的小问题。

docker run -d --name web \
  -p 8080:80 \
  -v /srv/web:/usr/share/nginx/html \
  --restart unless-stopped \
  nginx:latest

查看容器状态时,docker ps默认只显示正在运行的容器,加上-a才会包含已经退出的容器。这一点在排障时非常重要,因为如果容器启动后立刻退出,执行不带-a的docker ps会看不到它,容易误以为容器没有被创建。docker images则列出本地镜像,可以用--filter "dangling=true"查找悬空镜像,也就是没有名称和标签的中间镜像。清理空间时不要上来就执行docker rmi,先确认没有容器依赖该镜像。

docker ps -a --filter "status=exited"
docker images --filter "dangling=true"
docker inspect --format '{{.State.Status}}' web

日志与调试方面,docker logs适合查看容器标准输出和标准错误,docker exec用于在容器内部启动一个额外的调试进程。如果容器内部是精简镜像,bash可能并不存在,可以尝试使用/bin/sh。进入容器后如果还是找不到问题,docker port能直接显示容器的端口映射关系,避免凭记忆猜测端口。

docker logs --tail 100 -f web
docker exec -it web /bin/sh
docker port web

三、五个常见误区,提前避开

第一个误区是重复使用同一个容器名。如果之前执行过docker run --name web,即使容器已经退出,再次用同样的名字运行新容器会报名称冲突。原因是容器名在网络层和容器管理层具有唯一性。此时要么先执行docker rm web删除旧容器,要么直接使用docker start web恢复旧容器。很多误删容器的情况就是因为没有注意到这一点。

docker rm -f web
docker run -d --name web -p 8080:80 nginx:latest

第二个误区是端口映射顺序写反。-p参数遵循“宿主端口:容器端口”的顺序,写成-p 80:8080时,访问宿主机的80端口,流量会进入容器的8080端口。如果容器内服务只监听80端口,外部自然连不上。遇到端口不通,先用docker port查看实际映射,再检查宿主机防火墙或安全组规则。不要一上来就重启容器或重启Docker服务。

docker port web
ss -lntp | grep :8080

第三个误区是把docker exec和docker attach混用。attach连接到容器主进程的标准输入输出,适合查看主进程日志,但退出时可能影响容器;exec则是新开一个进程,即使执行exit也不会导致容器停止。调试时优先使用docker exec -it,尤其是需要执行多条命令、安装临时工具或查看文件内容时,它不会干扰容器主进程。

第四个误区是以为删除容器会保留数据。容器可写层的数据在docker rm后消失,只有挂载卷或宿主机目录中的数据会保留。修改容器内配置前,先想清楚是否需要持久化。第五个误区是把容器当虚拟机用,手动装软件、改配置,重启后各种异常。正确做法是写Dockerfile重新构建镜像,让环境可重复、可版本化。临时修改只能用于验证,不应作为长期运行的基础。

四、建立一套实用的排障顺序

遇到容器异常时,按固定顺序检查会更高效:先看状态,再看日志,最后查端口和挂载。如果容器创建后立刻退出,用docker ps -a确认容器是否存在,用docker logs查看报错信息。很多退出问题在日志里写得很清楚,比如配置文件错误、环境变量缺失、依赖服务没启动。不要急着重启Docker服务,那会中断所有容器的运行。

docker ps -a
docker logs --tail 50 web
docker inspect web

如果是端口访问不通,用docker port确认容器内端口映射是否正确,用curl在宿主机本地测试端口,再排查防火墙和安全组。这样能快速判断问题出在容器内部、宿主机网络,还是外部网络策略。如果是文件或配置丢失,确认是使用docker run -v挂载的路径还是容器可写层,路径写错是高频原因。挂载路径必须使用绝对路径,而且宿主目录需要提前存在,部分Docker版本会自动创建目录,但行为并不完全一致。

docker port web
curl -I http://127.0.0.1:8080
docker diff web

最后养成几个习惯:所有容器都加--name,避免随机名字带来的管理成本;数据需要留存时显式挂载卷;测试命令尽量写进Dockerfile里固化;定期用docker system df和docker system prune处理无用资源。这些命令不复杂,但能减少大量意外。Docker基本命令并不零散,围绕镜像、容器、日志、存储四块展开,理解参数背后的原理后就不需要死记硬背。把每次容器异常当成排查练习,依次检查状态、日志、端口、挂载四个环节,很多问题会在几分钟内被定位。

Docker基本命令容器管理docker run修改时间:2026-09-22 00:16:55

免责声明:已尽一切努力确保本网站所含信息的准确性。网站作品多为原创整理与精心创作,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们进行处理Email:chomcom@qq.com。
引用或转载本作品时,请注明当前出处:https://www.ipipp.com/html/0922/60253.html,基于非商业用途的前提下,欢迎转载或二创本作品。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。