本文目录导读:

管理容器运行状态(启停、状态查询等)通常通过容器守护进程(如 Docker、Podman、containerd) 提供的命令行工具或图形界面(如 Portainer)来实现。
以下是针对 Docker(最常用)和 Podman(Red Hat 系默认)的详细管理方法,涵盖了从基础到进阶的操作。
核心管理命令(以 Docker 为例)
Docker 是管理容器状态最主流的工具,以下命令同样适用于 Podman(只需将 docker 替换为 podman)。
启停容器
-
启动一个已存在的(停止的)容器:
docker start <容器名称或ID>
-
停止一个运行中的容器(发送 SIGTERM 信号,优雅关闭):
docker stop <容器名称或ID>
建议优先使用
stop,它会等待容器内的进程完成收尾工作。 -
强制停止一个容器(发送 SIGKILL 信号,直接杀死进程):
docker kill <容器名称或ID>
用于容器无法正常停止(卡死)时。
-
重启容器(先
stop再start):docker restart <容器名称或ID>
-
暂停/取消暂停(冻结进程,不停止进程):
docker pause <容器名称或ID> # 暂停 docker unpause <容器名称或ID> # 取消暂停
用于临时挂起容器而不释放资源。
状态查询
-
列出当前正在运行的容器:
docker ps
-
列出所有容器(包括已停止的):
docker ps -a # -a 表示 all
输出解读:
STATUS列:显示Up X minutes(运行中)、Exited (0)(正常停止)、Paused(已暂停)、Created(已创建未启动)。NAMES列:容器的可读名称,用于替代 ID 操作。
-
查看容器详细信息(包括网络、挂载卷、环境变量等):
docker inspect <容器名称或ID>
-
查看容器运行的实时日志:
docker logs -f <容器名称或ID> # -f 表示持续跟踪输出
-
查看容器进程占用资源(CPU、内存、网络):
docker stats
创建与删除(管理生命周期)
-
创建并启动一个新容器(最常用):
docker run -d --name myapp nginx:latest
-d:后台运行(detached)。--name:给容器起名(否则系统随机生成)。
-
删除一个容器(需先停止):
docker rm <容器名称或ID> # 停止状态 docker rm -f <容器名称或ID> # 强制删除(即使正在运行)
-
清理所有已停止的容器(释放磁盘空间):
docker container prune
自动化与批量管理
启动/停止/重启所有容器
-
停止所有运行中的容器:
docker stop $(docker ps -q) # -q 只输出容器ID
-
启动所有(已停止的、没有标记为手动管理的)容器:
docker start $(docker ps -a -q -f status=exited)
使用 docker-compose(推荐用于多容器环境)
如果你使用 docker-compose.yml 文件管理一组服务(如 Web + 数据库),可以统一控制:
- 启动/重建服务组:
docker-compose up -d
- 停止服务组:
docker-compose stop
- 彻底停止并删除容器、网络:
docker-compose down
- 重启特定服务:
docker-compose restart web
容器自启动策略(重启策略)
控制容器在启动崩溃或宿主机重启后是否自动运行,在 docker run 时添加 --restart 参数。
| 策略 | 行为 | 适用场景 |
|---|---|---|
no |
不自动重启(默认)。 | 一次性任务、测试容器 |
always |
无论退出码是什么,始终重启。 | 需要高可用的服务(如 Nginx) |
unless-stopped |
总是重启,除非手动 docker stop。 |
推荐生产环境 |
on-failure[:max-retries] |
仅当退出码非0(发生错误)时重启。 | 偶尔因错误崩溃的脚本 |
示例(创建时设置):
docker run -d --restart unless-stopped --name my-web nginx
修改已有容器的重启策略:
docker update --restart always my-web
图形化监控工具(推荐)
对于多容器环境,命令行有时不够直观,推荐使用以下轻量级工具:
-
Portainer: 最流行的容器管理 UI。
- 安装命令:
docker run -d -p 9000:9000 --name portainer --restart always -v /var/run/docker.sock:/var/run/docker.sock portainer/portainer-ce
- 访问
http://你的IP:9000,即可在网页上“一键”启动/停止/删除/查看日志/创建容器。
- 安装命令:
-
Cockpit: 集成到 Linux 系统管理的工具(适合 RHEL/CentOS/Fedora)。
- 安装
cockpit-podman或cockpit-docker插件,可在系统管理界面直接管理。
- 安装
常见问题与排查
-
“但容器又退出了!”
- 现象: 运行后状态变为
Exited (0)或Exited (1)。 - 原因: 前台进程执行完毕后退出,容器是进程隔离,如果主进程(PID 1)结束,容器就停止。
- 解决方案: 查看日志
docker logs <容器ID>,如果是脚本,确保它不会自然结束(如tail -f /dev/null),如果是服务,检查配置文件是否正确。
- 现象: 运行后状态变为
-
“如何让容器在后台运行?”
- 使用
-d参数。
- 使用
-
“如何保留容器修改后的数据?”
- 使用数据卷(Volume) 或绑定挂载(Bind Mount),仅靠
docker commit不推荐用于生产。
- 使用数据卷(Volume) 或绑定挂载(Bind Mount),仅靠
最佳实践工作流
- 创建:
docker run -d --restart unless-stopped --name my-service ... - 检查状态:
docker ps -a或docker logs my-service - 临时停止:
docker stop my-service - 临时启动:
docker start my-service - 永久移除(先停止):
docker stop my-service->docker rm my-service - 批量操作: 使用
docker-compose+ 相关命令。
掌握以上命令和策略,你就可以高效地管理电脑上任意容器的运行状态了。