关于 docker-run
docker-run 是面向开发者和运维人员的 Docker 容器运行与管理指导技能,涵盖容器生命周期操作。内容包括资源限制、健康检查、重启策略、日志和交互式调试;它提供操作说明,不附带可执行脚本。
主要功能
- 01使用常见选项运行容器
- 02设置内存和 CPU 限制
- 03配置健康检查与重启策略
- 04查看日志和容器健康状态
- 05使用 docker exec 和信号调试
适用场景
- 01启动并映射端口和卷的服务
- 02为工作负载限制容器资源
- 03通过健康状态和日志诊断容器
- 04为服务配置重启行为
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ full-stack-skills/ docker-skills --skill docker-run安装后在 Claude Code 中输入/docker-run确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
agents/openai.yamlexamples/01-basic-run.md01-healthcheck.md02-resource-limits.mdreferences/01-restart-policies.md01-run-reference.md02-logging-drivers.md03-healthcheck-patterns.md详细介绍
Docker Run — 容器生命周期管理
运行、监控和管理 Docker 容器的完整指南。
使用场景
用户提到以下内容时,始终使用此技能:
- “docker run”、“运行容器”、“启动容器”
- “docker ps”、“docker stop”、“docker restart”
- “容器资源限制”、“memory limit”、“CPU limit”
- “健康检查”、“healthcheck”
- “docker logs”、“查看日志”
- “docker exec”、“进入容器”
- “restart policy”、“容器重启策略”
容器生命周期
docker pull → docker create → docker start → docker run (create+start)
│
┌─────────────────────┼─────────────────────┐
▼ ▼ ▼
Running Paused/Stopped Killed
│ │
▼ ▼
docker stop docker start
docker kill docker restart
docker rm docker rm -f
docker run — 完整参考
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
# Most common form
docker run -d --name myapp \
-p 8080:8080 \
-v /host/path:/container/path \
-e ENV_VAR=value \
--restart unless-stopped \
myimage:tag
| 标志 | 用途 | 示例 |
|---|---|---|
-d | 分离模式(后台运行) | -d |
--name | 容器名称 | --name my-nginx |
-p | 端口映射(主机:容器) | -p 8080:80 |
-v | 卷/绑定挂载 | -v data:/var/lib/mysql |
-e | 环境变量 | -e DB_HOST=localhost |
--env-file | 从文件加载环境变量 | --env-file .env |
--restart | 重启策略 | --restart unless-stopped |
--rm | 停止时自动删除 | --rm(用于临时容器) |
资源限制
# Memory: limit + reservation
docker run --memory=512m --memory-reservation=256m myapp
# CPU: shares (relative) + cpus (absolute)
docker run --cpus=2 --cpu-shares=1024 myapp
# Combined: production-grade limits
docker run -d \
--memory=1g --memory-swap=1g \
--cpus=2 \
--pids-limit=100 \
myapp
| 资源 | 标志 | 最佳实践 |
|---|---|---|
| 内存 | --memory=512m | 始终设置;否则容器可能耗尽主机内存 |
| 内存+交换空间 | --memory-swap=1g | 设置为与内存相同的值以禁用交换空间 |
| CPU | --cpus=2 | 硬性限制;使用 --cpu-shares 设置相对优先级 |
| PID | --pids-limit=100 | 防止 fork 炸弹 |
| Ulimit | --ulimit nofile=65536 | 文件描述符限制 |
健康检查
Dockerfile HEALTHCHECK
HEALTHCHECK --interval=30s --timeout=3s --retries=3 \
CMD curl -f http://localhost:8080/health || exit 1
健康检查状态
starting → healthy (passes)
→ unhealthy (fails 3 consecutive checks)
# Check health status
docker inspect --format='{{.State.Health.Status}}' myapp
# Health check in compose
# services.app.healthcheck.test: ["CMD", "curl", "-f", "http://localhost:8080/health"]
重启策略
| 策略 | 行为 | 使用场景 |
|---|---|---|
no | 从不重启(默认) | 一次性任务 |
on-failure[:N] | 非零退出时重启,最多 N 次 | 批处理任务 |
always | 始终重启 | 关键服务(注意:存在无限循环风险) |
unless-stopped | 除非显式停止,否则重启 | 推荐用于大多数服务 |
docker run --restart unless-stopped myapp
docker update --restart always myapp # Change policy on running container
日志与调试
# View logs
docker logs myapp # All logs
docker logs -f myapp # Follow (tail -f)
docker logs --tail 50 myapp # Last 50 lines
docker logs --since 10m myapp # Last 10 minutes
# Execute commands in container
docker exec -it myapp sh # Interactive shell
docker exec myapp cat /etc/hosts # Run single command
# Inspect state
docker inspect myapp # Full JSON metadata
docker stats myapp # Live resource usage
docker top myapp # Running processes
docker port myapp # Port mappings
信号处理
docker stop myapp → SIGTERM → wait 10s → SIGKILL
docker kill myapp → SIGKILL immediately
docker kill -s HUP myapp → Send custom signal
| 信号 | docker 命令 | 容器效果 |
|---|---|---|
| SIGTERM | docker stop | 优雅关闭(默认) |
| SIGKILL | docker kill | 强制终止(不执行清理) |
| SIGHUP | docker kill -s HUP | 重新加载配置(取决于具体应用) |
工作流 — 推荐操作流程
步骤 1:拉取或构建镜像:使用 docker pull 或 docker build 准备好镜像
步骤 2:运行容器:docker run -d --name myapp -p 8080:8080 -v data:/data --memory 512m myapp
步骤 3:验证启动:使用 docker ps + docker logs myapp 确认运行正常
步骤 4:配置健康检查:确保在 Dockerfile 中定义 HEALTHCHECK,或在运行时指定
步骤 5:监控运行状态:使用 docker stats + docker logs -f 持续观察
注意事项 — 常见陷阱
- 默认
--memory=0(不限制):容器可能耗尽所有主机内存。→ 恢复方法:使用docker run --memory=512m --cpus=1 app;使用docker stats检查用量。 docker stop超时:默认宽限期为 10 秒。→ 恢复方法:使用docker stop -t 30 myapp;确保应用能正确处理 SIGTERM。docker run会创建新容器:运行两次docker run nginx会创建两个容器。→ 恢复方法:使用docker start <existing-name>重启已有容器;使用docker ps -a查找已停止的容器。- 日志占满磁盘:JSON-file 驱动程序默认不进行轮转。→ 恢复方法:使用
docker run --log-opt max-size=10m --log-opt max-file=3 app;对于现有容器,编辑/etc/docker/daemon.json并重启 dockerd。 docker exec退出代码:返回命令的退出代码。→ 恢复方法:在脚本中使用:docker exec myapp healthcheck.sh || exit 1。
能力边界 — 适用与不适用场景
| 分类 | 场景 | 说明 |
|---|---|---|
| ✅ 能做 | 使用 docker run 运行容器 | 所有参数、资源限制、重启策略 |
| ✅ 能做 | 配置健康检查 | HEALTHCHECK 指令 + 运行时覆盖 |
| ✅ 能做 | 日志管理 | 日志驱动选择 + 轮转配置 |
| ✅ 能做 | 进入容器调试 | docker exec / docker attach |
| ⚠️ 需条件 | --privileged 特权模式 | 仅用于调试,禁止用于生产环境 |
| ⚠️ 需条件 | 修改运行中容器的限制 | 需使用 docker update,部分参数无法动态修改 |
| ❌ 超范围 | 编写 Dockerfile | 使用 docker-dockerfile |
| ❌ 超范围 | 多容器编排 | 使用 docker-compose |
| ❌ 超范围 | 镜像构建 | 使用 docker-build |
不适合使用此技能的情况
| ❌ 跳过 | ✅ 改用 |
|---|---|
| Docker 基础知识 / 首次设置 | docker-basics |
| 编写 Dockerfile | docker-build |
| 多容器应用 | docker-compose |
| 网络配置 | docker-networking |
| 存储/卷管理 | docker-storage |
安全与稳定性
- 在生产环境中始终设置
--memory和--cpus限制,以避免邻居容器争抢资源的问题。 - 避免使用
--privileged标志。改用特定的--cap-add。 - 切勿以 root 身份运行容器。使用
--user标志或在 Dockerfile 中设置USER。 - 对无状态容器尽可能使用
--read-only。 - 不包含可执行脚本,仅提供指导。
📚 官方文档参考
🧭 Docker 技能学习路径
📍 你在这里:
docker-run— 第 3 步:容器管理与运维
← 上一步:docker-build — Dockerfile 与镜像构建
→ 下一步:docker-networking / docker-storage / docker-compose
评论
支持 Markdown