mcpField
D
docker-run

docker-run

github.com/full-stack-skills云与 DevOps3103 次安装4 周前更新
代码仓库

关于 docker-run

docker-run 是面向开发者和运维人员的 Docker 容器运行与管理指导技能,涵盖容器生命周期操作。内容包括资源限制、健康检查、重启策略、日志和交互式调试;它提供操作说明,不附带可执行脚本。

主要功能

  1. 01使用常见选项运行容器
  2. 02设置内存和 CPU 限制
  3. 03配置健康检查与重启策略
  4. 04查看日志和容器健康状态
  5. 05使用 docker exec 和信号调试

适用场景

  1. 01启动并映射端口和卷的服务
  2. 02为工作负载限制容器资源
  3. 03通过健康状态和日志诊断容器
  4. 04为服务配置重启行为

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/full-stack-skills/docker-skills --skill docker-run

安装后在 Claude Code 中输入/docker-run确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

agents/
openai.yaml
examples/
01-basic-run.md
01-healthcheck.md
02-resource-limits.md
references/
01-restart-policies.md
01-run-reference.md
02-logging-drivers.md
03-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 命令容器效果
SIGTERMdocker stop优雅关闭(默认)
SIGKILLdocker kill强制终止(不执行清理)
SIGHUPdocker 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
编写 Dockerfiledocker-build
多容器应用docker-compose
网络配置docker-networking
存储/卷管理docker-storage

安全与稳定性

  • 在生产环境中始终设置 --memory 和 --cpus 限制,以避免邻居容器争抢资源的问题。
  • 避免使用 --privileged 标志。改用特定的 --cap-add。
  • 切勿以 root 身份运行容器。使用 --user 标志或在 Dockerfile 中设置 USER。
  • 对无状态容器尽可能使用 --read-only。
  • 不包含可执行脚本,仅提供指导。

📚 官方文档参考

文档地址
Docker 引擎https://docs.docker.com/engine/
docker run 参考https://docs.docker.com/reference/cli/docker/container/run/
容器管理 CLIhttps://docs.docker.com/reference/cli/docker/container/
运行时选项https://docs.docker.com/engine/reference/run/
资源限制https://docs.docker.com/config/containers/resource_constraints/
日志驱动https://docs.docker.com/config/containers/logging/

🧭 Docker 技能学习路径

📍 你在这里:docker-run — 第 3 步:容器管理与运维

← 上一步:docker-build — Dockerfile 与镜像构建 → 下一步:docker-networking / docker-storage / docker-compose

评论

支持 Markdown