关于 docker-debugger
docker-debugger 是用于排查 Docker 构建、运行、网络和性能问题的技能,指导开发者收集诊断信息、分析日志并处理常见故障。
主要功能
- 01构建与运行故障排查
- 02容器日志和状态检查
- 03网络诊断
- 04卷权限处理建议
- 05Dockerfile 最佳实践
适用场景
- 01调查容器意外退出
- 02追查 Docker 构建失败
- 03诊断容器连接问题
- 04解决卷权限错误
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ onewave-ai/ claude-skills --skill docker-debugger安装后在 Claude Code 中输入/docker-debugger确认已加载。
详细介绍
Docker 调试器
说明
调试 Docker 问题时:
- 识别问题类型:构建、运行时、网络或性能
- 使用诊断命令收集信息
- 分析日志和错误
- 应用修复方案
诊断命令
# Check running containers
docker ps -a
# View container logs
docker logs <container_id> --tail 100 -f
# Inspect container
docker inspect <container_id>
# Check resource usage
docker stats
# View container processes
docker top <container_id>
# Execute shell in running container
docker exec -it <container_id> /bin/sh
# Check Docker disk usage
docker system df
# View build history
docker history <image_name>
常见问题与解决方案
1. 容器立即退出
# Check exit code
docker inspect <container_id> --format='{{.State.ExitCode}}'
# View last logs
docker logs <container_id>
修复方案:
- 确保 CMD/ENTRYPOINT 运行的是前台进程
- 检查是否缺少依赖项
- 验证环境变量
2. 构建失败
# Use multi-stage builds for smaller images
FROM node:20-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build
FROM node:20-alpine AS runner
WORKDIR /app
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/node_modules ./node_modules
CMD ["node", "dist/index.js"]
3. 网络问题
# List networks
docker network ls
# Inspect network
docker network inspect <network_name>
# Check container IP
docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' <container>
4. 卷权限问题
# Create non-root user
RUN addgroup -g 1001 -S appgroup && \
adduser -u 1001 -S appuser -G appgroup
# Set ownership
COPY --chown=appuser:appgroup . .
USER appuser
Dockerfile 最佳实践
# 1. Use specific tags, not :latest
FROM node:20.10-alpine
# 2. Set working directory
WORKDIR /app
# 3. Copy dependency files first (better caching)
COPY package*.json ./
RUN npm ci --only=production
# 4. Copy source after dependencies
COPY . .
# 5. Use non-root user
USER node
# 6. Set proper labels
LABEL maintainer="[email protected]"
LABEL version="1.0"
# 7. Use HEALTHCHECK
HEALTHCHECK --interval=30s --timeout=3s \
CMD wget -q --spider http://localhost:3000/health || exit 1
# 8. Expose ports
EXPOSE 3000
# 9. Use exec form for CMD
CMD ["node", "server.js"]
docker-compose 调试
# docker-compose.yml
services:
app:
build:
context: .
dockerfile: Dockerfile
# Add for debugging
stdin_open: true
tty: true
# Override command for debugging
command: /bin/sh
volumes:
- .:/app
environment:
- DEBUG=true
# Rebuild without cache
docker-compose build --no-cache
# View logs
docker-compose logs -f app
# Restart single service
docker-compose restart app
评论
支持 Markdown