# docker-agent **Repository Path**: os-lee/docker-agent ## Basic Information - **Project Name**: docker-agent - **Description**: docker-agent功能: 1. 打印docker-agent版本信息 2. 运行容器 验证容器参数 获取环境变量的镜像仓库信息并登录 检查容器是否重复,删除旧容器 运行新容器,拉取新镜像,限制cpu,内存,文件句柄 清理宿主机上没有运行的镜像 返回运行结果 3. 日志采集 - **Primary Language**: Go - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-04-21 - **Last Updated**: 2025-12-12 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 介绍 docker-agent功能: 1. 健康检查接口 - `/health` 2. 打印docker-agent版本信息 - `/info` 3. 运行容器 - `/start-container` - 验证容器参数 - 获取环境变量的镜像仓库信息并登录 - 优雅停止并删除旧容器 - 拉取新镜像,运行新容器 - 支持CPU、内存、文件句柄等资源限制 - 支持环境变量、网络模式、自定义命令等高级功能 - 支持健康检查、日志驱动、标签等配置 - 清理宿主机上没有运行的镜像 - 返回容器运行状态和IP地址 3. 日志采集 - 采集时间精确到毫秒 - 新的日志消息以时间戳开头 - 如果一直没有新日志,5秒后提交最后一条 - 从nacos自动发现服务采集 - 提供一个接口,查看现在正在采集的服务及地址 ## 使用 ### 1. 运行 使用docker-compose部署 ### 2. 健康检查 服务提供了健康检查接口,可用于监控服务状态(Docker Compose 会自动检查): ```bash # 手动检查服务健康状态 curl http://127.0.0.1:10080/health # 或使用 /healthz(Kubernetes 标准) curl http://127.0.0.1:10080/healthz ``` 响应示例: ```json { "status": "healthy", "service": "docker-agent", "version": "20241212" } ``` ### 3. 接口调用 #### 基础示例 ```bash curl -X POST -H "Content-Type: application/json" \ -H "X-API-Key: your-api-key" \ -d '{ "container_name": "test-container", "image_version": "swr.cn-southwest-2.myhuaweicloud.com/wd/nginx:1.27-alpine3.20", "ports": ["8080:80"], "mount_infos": ["/etc/localtime:/etc/localtime:ro"], "cpu_count": 0.5, "memory_limit": "512m", "ulimit": "nofile=65535:65535" }' http://127.0.0.1:10080/start-container ``` #### 完整功能示例 ```bash curl -X POST -H "Content-Type: application/json" \ -H "X-API-Key: your-api-key" \ -d '{ "container_name": "app-container", "image_version": "swr.cn-southwest-2.myhuaweicloud.com/wd/nginx:1.27-alpine3.20", "ports": ["8080:80", "8443:443"], "mount_infos": ["/etc/localtime:/etc/localtime:ro", "/data:/app/data"], "cpu_count": 1.0, "memory_limit": "1g", "ulimit": "nofile=65535:65535", "env_vars": { "APP_ENV": "production", "DEBUG": "false" }, "network_mode": "bridge", "hostname": "app-host", "dns": ["8.8.8.8", "114.114.114.114"], "user": "1000:1000", "workdir": "/app", "restart_policy": "unless-stopped", "command": ["nginx", "-g", "daemon off;"], "labels": { "app": "myapp", "env": "prod" }, "log_driver": "json-file", "log_opts": { "max-size": "10m", "max-file": "3" }, "health_cmd": "curl -f http://localhost/health || exit 1", "health_interval": "30s", "health_timeout": "10s", "health_retries": 3 }' http://127.0.0.1:10080/start-container ``` ### 3. 请求参数说明 #### 必填参数 - `container_name`: 容器名称 - `image_version`: 镜像版本(必须以swr.cn-southwest-2.myhuaweicloud.com开头) - `ports`: 端口映射数组,格式: ["hostPort:containerPort"] - `mount_infos`: 挂载信息数组,格式: ["hostPath:containerPath:ro"] #### 资源限制(可选) - `cpu_count`: CPU核心数,如: 0.5, 1.0, 2.0 - `memory_limit`: 内存限制,如: "512m", "1g" - `ulimit`: 文件句柄限制,如: "nofile=65535:65535" #### 高级功能(可选) - `env_vars`: 环境变量映射,如: {"KEY": "value"} - `network_mode`: 网络模式,如: "bridge", "host", "none" 或自定义网络名 - `hostname`: 容器主机名 - `dns`: DNS服务器数组,如: ["8.8.8.8"] - `user`: 运行用户,如: "1000:1000" 或 "username" - `workdir`: 工作目录 - `restart_policy`: 重启策略,可选: "always", "on-failure", "unless-stopped", "no"(默认: "always") - `command`: 覆盖CMD命令数组 - `entrypoint`: 覆盖ENTRYPOINT数组 - `labels`: 容器标签映射 - `log_driver`: 日志驱动,如: "json-file", "syslog", "none" - `log_opts`: 日志选项,如: {"max-size": "10m", "max-file": "3"} - `health_cmd`: 健康检查命令 - `health_interval`: 健康检查间隔,如: "30s" - `health_timeout`: 健康检查超时,如: "10s" - `health_retries`: 健康检查重试次数 ### 4. 响应示例 ```json { "message": "Container started successfully", "container_id": "abc123def456", "container_name": "app-container", "status": "Up 2 seconds", "ip": "172.17.0.2" } ```