智能
助手
最大化  清空记录 停止  历史记录
翻译选中文本
选中一段文本后进行翻译
名词解释
选中一段文本后进行名词解释
知识图谱生成
通过图谱展示知识信息
登录用户在知识浏览页面可用
答案生成
AI自动回答一个问答功能中的问题
登录用户在问答浏览页面,且问题开放回答中可用
知识摘要
自动为当前知识生成摘要
知识浏览页面可用
知识问答
针对当前知识进行智能问答
知识浏览面可用
   49  
查询码: 00000209
4 容器管理
作者: 文艺范儿 于 2025年12月20日 发布在分类 / Docker & K8S / docker基础 ,于 2025年12月20日 编辑
docker

4. 容器管理

4.1 Docker容器支持的 4 种重启策略

策略 说明 触发条件 适用场景

no

不自动重启

永不自动重启

一次性任务(batch job)、调试容器

always

总是重启

无论退出码是什么,总是重启(包括手动 docker stop后 Docker 重启也会拉起)

长期运行的关键服务(需配合 --restart=unless-stopped更安全)

on-failure

失败时重启

仅当容器以 非零退出码 退出时才重启,可设最大重试次数

可能因暂时性错误退出的服务,防止无限重启

unless-stopped

除非手动停止,否则总是重启

类似 always,但 手动 docker stop后不会自动重启(即使 Docker 守护进程重启)

生产关键服务,避免运维手动停止后被意外拉起

生产推荐unless-stopped+ 健康检查 + 资源限制 + 监控告警。

4.2 Docker 容器状态

在 Docker 中,容器的运行状态(State)可以分为多种,每种状态反映了容器在其生命周期中的不同阶段。

你可以通过 docker ps(运行中容器)和 docker ps -a(所有容器)查看状态,也可以通过 docker inspect <容器名或ID>查看更详细的 State字段。

状态 含义 说明

created

已创建

容器已创建但未启动,文件系统已准备好,但进程未运行。

running

运行中

容器正在运行,主进程处于活动状态。

paused

已暂停

容器内的所有进程被暂停(SIGSTOP),内存状态保留,可恢复。

exited

已退出

容器主进程已终止(正常退出或异常退出),退出码非 0 表示异常。

dead

死亡

容器无法被正常停止或移除,通常是 Docker 引擎内部错误状态。

restarting

重启中

容器正在重启(例如设置了 --restart策略且进程退出)。

removing

移除中

容器正在被 docker rm删除的过程中。

4.3 创建容器常见选项

Usage: docker container COMMAND

docker container —help

指令 描述

-i , —interactive

交互式

-t , —tty

分配一个伪终端

-d , —detach

运行容器到后台

-e , —env

设置环境变量

-p , —publish list

发布容器端口到主机

-P , —publish-all

发布容器所有 EXPORT 端口到宿主机随机端口

—name string

指定容器名称

-h , —hostname

设置容器主机名

—ip string

指定容器 IP ,只能用于自定义网络

—network

连接容器到一个网络

—mount mount

将文件系统附加到容器

-v , —volume list

绑定挂载一个卷

—restart string

容器退出时重启策略,默认 no ,可选值: [always\

on-failure]

4.4 管理容器常用命令

选项 描述

ls

列出容器

inspect

查看一个容器或者多个容器的详细信息

exec

在运行容器中执行命令

commit

创建一个新镜像来自一个容器

cp

拷贝文件 / 目录到一个容器

logs

获取一个容器日志

port

列出或指定容器端口映射

top

显示一个容器运行的进程

stats

显示容器资源使用统计

stop/start

停止 / 启动一个或多个容器

rm

删除一个或多个容器

4.4.1 运行容器

# 基础运行(后台模式 + 端口映射)
docker run -d --name web -p 8080:80 nginx:1.25

# 指定资源限制(CPU/Memory) #可以实现资源限制热更新 docker update 
docker run -d --name limited \
  --cpus="0.5" \          # 限制 50% CPU
  --memory="256m" \       # 限制 256MB 内存
  --memory-swap="512m" \  # 允许使用交换分区(总内存+Swap)
  nginx:1.25

# 挂载卷(数据持久化) # Docker Volume(推荐生产)   # Bind Mount(开发调试)
docker run -d --name db \
  -v mysql_data:/var/lib/mysql \  # Docker Volume(推荐生产)
  -v /host/config:/etc/mysql/conf.d \  # Bind Mount(开发调试)
  mysql:8.0

# 健康检查(容器自愈)
docker run -d --name app \
  --health-cmd="curl -f http://localhost/health || exit 1" \
  --health-interval=30s \
  --health-retries=3 \
  myapp:1.0

关键参数

  • -d:后台运行(Daemon 模式)。
  • -p:端口映射(主机端口:容器端口)。
  • --cpus/--memory:限制资源,防止“吵闹邻居”效应。
  • -v:挂载卷(Volume 比 Bind Mount 更安全)。
  • --health-*:定义健康检查(配合编排工具自动重启)。

4.4.2 容器管理

# 查看运行中的容器(含状态、端口)
docker ps --format "table {{.ID}}\t{{.Names}}\t{{.Status}}\t{{.Ports}}"

# 查看所有容器(包括已停止)
docker ps -a

# 停止/启动容器
docker stop web  # 优雅停止(SIGTERM → SIGKILL)
docker start web

# 强制终止容器
docker kill -s KILL web  # 直接发 SIGKILL(慎用)

# 重启容器
docker restart web

# 删除容器(必须已停止)
docker rm web
docker rm -f web  # 强制删除(即使运行中)

# 查看容器日志(实时跟踪)
docker logs -f --tail=100 web  # -f 跟踪,--tail 显示最后 N 行

# 进入容器 Shell(调试)
docker exec -it web /bin/bash  # 交互式终端
docker exec web ls /app        # 非交互式命令

SRE 建议

  • 生产环境避免频繁使用 docker exec,优先通过日志和监控排查问题。
  • 使用 --health-*参数确保容器异常时自动重启(如 --restart=on-failure:3)。

4.4.3 容器资源监控

# 实时查看容器资源占用(CPU/MEM/NetIO)
docker stats --format "table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}\t{{.NetIO}}"

# 导出容器指标(对接 Prometheus)
docker stats --no-stream --format '{"name":"{{.Name}}","cpu":{{.CPUPerc}},"mem":{{.MemUsage}}}'

生产实践

  • docker stats数据接入 Grafana,设置告警规则(如 MEM > 90% 持续 5min)。
笔记
0人参与


 历史版本

备注 修改日期 修改人
创建版本 2025-12-20 00:53:30[当前版本] 文艺范儿

  目录
    文艺知识分享平台 -V 5.2.5 -wcp