Skip to content

coracoo/docker2compose

Repository files navigation

docker2compose

Docker Build Tests Docker Pulls Docker Image Size

前言

本工具用于读取极空间私有云系统中的存量Docker容器信息,自动生成对应的docker-compose.yaml文件。

它会根据容器之间的网络关系(自定义网络或link连接)将相关容器分组,并为每组容器生成一个独立的docker-compose.yaml文件。

理论上所有NAS都可以用,但是有些特意删除的功能,比如命令、性能限制、endpiont等,由于极空间不支持,所以删除了。

我的仓库

1️⃣ : 中文docker项目集成项目: https://github.com/coracoo/awesome_docker_cn

2️⃣ : docker转compose:https://github.com/coracoo/docker2compose

3️⃣ : 容器部署iSCSI,支持绿联极空间飞牛:https://github.com/coracoo/d-tgtadm/

4️⃣ : 容器端口检查工具: https://github.com/coracoo/DockPorts/

我的频道

首发平台——什么值得买:

微信公众号:

关注


功能特点

  • 纯AI打造,有问题提issuse,特殊容器贴原docker cli
  • 读取系统中所有Docker容器信息
  • 分析容器之间的网络关系(自定义network和link连接)
  • 根据网络关系将相关容器分组
  • 为每组容器生成对应的docker-compose.yaml文件(根据首个容器名称)
  • 智能时区管理:自动读取配置文件中的时区设置并应用到容器系统,确保定时任务在正确时区执行
  • 支持提取容器的各种配置,包括:
    • 容器名称
    • 镜像
    • 端口映射
    • 环境变量
    • 数据卷(volume/bind)
    • 网络(host/bridge/macvlan单独配置,其它网络根据名称在一起)
    • 重启策略
    • 特权模式
    • 硬件设备挂载
    • cap_add 能力
    • command和entrypoint(在ZOS模式下不生成)
    • 健康检测
    • 其他配置等等

🌐全新的 Web UI 访问

部署完成后,可通过浏览器访问Web界面:

  • 本地访问:http://localhost:5000
  • 局域网访问:http://你的IP地址:5000

Web UI功能特点

  • 📊 容器管理:实时查看所有Docker容器状态,按网络关系自动分组
  • 📄 Compose预览:直接在界面中查看生成的docker-compose.yaml文件内容
  • 调度器监控:实时监控定时任务状态,查看执行日志
  • 🚀 立即执行:一键执行compose文件生成任务
  • 🗂️ 文件管理:浏览和管理生成的compose文件目录
  • 📝 日志查看:查看详细的执行日志,支持清空日志功能
  • 🎨 响应式设计:采用三栏式布局(容器列表:文件列表:编辑器 = 1:1:2),适配不同屏幕尺寸
  • 🔘 优化界面:"关于我"按钮采用白底设计,提供更好的视觉对比度

🔻项目首页

QQ_1751597270453

🔻可视化配置编辑

QQ_1751597299766

🔻定时任务管理

QQ_1751597315617

配置文件说明 (/app/config.json)

  • NAS: 指定NAS系统类型

    • debian: 默认值,生成完整配置
    • zos: 极空间系统,不生成command和entrypoint配置
  • CRON: 定时执行配置,支持5位\6位Cron规则,示例:0 2 * * *(每天凌晨2点执行)

    • 默认值:0 */12 * * *(每天0点起,每天12小时执行一次)
    • once: 执行一次后退出
  • NETWORK: 控制bridge网络配置的显示方式

    • true: 默认值,在生成的compose.yaml中显式添加 network_mode: bridge 配置
    • false: 隐藏bridge网络配置,不在compose.yaml中显示 network_mode: bridge(因为bridge是Docker默认网络模式)
  • TZ: 时区设置,影响容器内系统时间和定时任务执行

    • 默认值:Asia/Shanghai
    • 支持标准时区格式:Asia/ShanghaiEurope/LondonAmerica/New_York
    • 容器启动时会自动应用此时区设置到系统中
    • 如果指定的时区文件不存在,系统会显示警告并使用UTC时区

输出目录说明

  • /app/compose: 脚本输出目录,默认值为/app/compose
  • /app/compose/YYYY_MM_DD_HH_MM: 定时任务输出目录,格式为YYYY_MM_DD_HH_MM,例如2023_05_04_15_00
  • /app/logs:定时任务日志

输出说明

  • 对于单个独立的容器,生成的文件名格式为:{容器名}.yaml
  • 对于有网络关系的容器组,生成的文件名格式为:{第一个容器名前缀}-group.yaml
  • 所有生成的文件都会保存在compose/时间戳目录下

注意事项

  • 该工具需要Docker命令行权限才能正常工作
  • 生成的docker-compose.yaml文件可能需要手动调整以满足特定需求
  • 通过Docker运行时,会将宿主机的Docker套接字挂载到容器中,以便获取容器信息
  • 工具支持定时执行,默认once(只执行一次),可通过CRON环境变量自定义执行时间
  • 时区配置重要提醒
    • 容器启动时会自动读取 config.json 中的TZ配置并应用到系统
    • 如果定时任务时间不准确,请检查TZ配置是否正确
    • 可通过 docker exec d2c-container date 命令验证容器内时区是否正确
  • 关于Macvlan网络,DHCP的理论上会展示macvlan:{}
  • 对于使用默认bridge网络但没有显式link的容器,它们可能会被分到不同的组中
  • 工具会将自定义网络标记为external: true,因为它假设这些网络已经存在

使用方法

1、通过compose部署(推荐)

启用前确保系统安装了docker

🔻docker cli启动

docker run -itd --name d2c \
  -v /var/run/docker.sock:/var/run/docker.sock:ro \
  -v /{path}/d2c/compose:/app/compose \
  -v /{path}/d2c/logs:/app/logs \
  -v /{path}/d2c/config:/app/config \
  -p 5000:5000 \
  -e TZ=Asia/Shanghai \
  crpi-xg6dfmt5h2etc7hg.cn-hangzhou.personal.cr.aliyuncs.com/cherry4nas/d2c:latest
  # 或使用github镜像源:ghcr.io/coracoo/d2c:latest

🔻docker compose启动

services:
  d2c:
    image: crpi-xg6dfmt5h2etc7hg.cn-hangzhou.personal.cr.aliyuncs.com/cherry4nas/d2c:latest
    # github镜像源
    # image: ghcr.io/coracoo/d2c:latest
    container_name: d2c
    ports:
      - "5000:5000"  # Web UI端口
    environment:
      - TZ=Asia/Shanghai  # 可选,时区设置
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - /{path}/d2c/compose:/app/compose
      - /{path}/d2c/logs:/app/logs
      - /{path}/d2c/config:/app/config

2、直接运行(需要Python环境)

如果您的系统已安装Python环境,也可以直接运行:

  1. 确保系统中已安装Python 3和Docker
  2. 确保脚本有执行权限
chmod +x d2c.py
  1. 安装python所需的依赖包
pip install -r requirements.txt
  1. 运行脚本
./run.sh
  1. 脚本会在当前目录下创建一个compose文件夹,并在其中生成docker-compose.yaml文件

3、运行测试

项目现在包含了完整的测试套件,用于验证核心功能:

# 安装测试依赖
pip install -r requirements.txt

# 运行所有测试
python run_tests.py

# 或者使用pytest直接运行
python -m pytest tests/ -v

测试套件包含40个综合测试,覆盖:

  • 配置管理和验证
  • 容器分析和分组逻辑
  • CRON表达式处理
  • 调度器功能
  • Web UI工具函数

详细信息请参阅 tests/README.md

4、Docker镜像

4.1 镜像版本

项目支持自动构建多平台Docker镜像并推送到Docker Hub:

- **Docker Hub**: `jackie264/docker2compose`
- **GitHub Container Registry**: `ghcr.io/coracoo/d2c`
- **阿里云镜像仓库**: `crpi-xg6dfmt5h2etc7hg.cn-hangzhou.personal.cr.aliyuncs.com/cherry4nas/d2c`

4.1 支持的平台

  • linux/amd64
  • linux/arm64
  • linux/arm/v7

4.2 自动构建

  • 每次推送到master分支时自动构建
  • 创建版本标签时自动构建并发布
  • 构建前会自动运行完整测试套件
  • 详细设置说明请参阅 docs/DOCKER_HUB_SETUP.md

更新说明

2025-07-30(v1.1.5)

  • 增加了完整的test套件(@Jackie264)
  • 增加了docker.hub镜像源(@jackie264)
  • 优化了entrypoint.sh,优化了部分icon图标更新(@jackie264)
  • 使用 Dependabot 自动更新所需的依赖项(@jackie264)
  • 修复部分CRON会导致调度器异常以及无法重启的问题(@jackie264)

2025-07-12(v1.1.4)

  • 修复Dockerfile.github中未添加procps以来导致CRON无法识别启动的问题
  • 优化@Jackie264提到,关于PID 1进程管理问题:新增 entrypoint.sh 脚本专注于PID 1进程管理,不会自动启动调度器
  • 实现Web UI进程的监控和重启机制,调度器由Web UI界面管理
  • 添加优雅的容器停止处理,确保所有子进程正确清理
  • 避免once模式下的调度器冲突,提升容器健壮性和一致性
  • 解决子进程意外退出导致容器停止的问题
  • 修复容器内时区显示为UTC而非配置时区的问题

2025-07-09(v1.1.3)

  • 🎨 UI布局优化
    • 重新设计顶部导航栏为三栏式布局:左侧"关于我"按钮、中间Logo和项目名称居中、右侧功能按钮
    • 调整主内容区域布局比例为 1:1:2(容器列表:文件列表:编辑器),解决编辑器过宽问题
    • 优化响应式设计,在移动端(768px以下)自动切换为垂直堆叠布局
    • 修复设置保存、Cron异常的问题。

2025-07-04(v1.1.2)

  • 改进了Host网络和Macvlan网络的compose文件命名规则
    • Host网络容器组现在生成host-group.yaml文件名
    • Macvlan网络容器组现在生成{网络名}-group.yaml文件名
  • 增加配置文件config.json的持久化读取,现在在/app/config/config.json目录下
  • 优化compose编辑器,现在保存compose文件后会自动刷新文件列表
  • 修复dockerfile中路径映射不生效、flask缺失的问题
  • 优化切换compose文件的视觉效果
  • 修复任务计划、生成全量Compose功能,时区配置不起作用的问题
  • 优化任务计划中,once参数启动任务、任务停止(未启动)时的提示内容
  • 修复任务计划中,缺失gnupg导致无法正确识别CRON和调度器状态的问题

2025-07-03(v1.1.0)

  • 🎉 新增Web UI界面

    • 采用全新得现代化的图形界面设计,原CLI模式保留不变。
    • 左侧为容器分组展示,支持按网络关系自动分组,包含运行状态、容器数量等。
    • 中间为文件列表,展示/app/compose目录下所有得yaml文件。
    • 右侧是Compose编辑区域,支持勾选docker整合compose。
    • 新增设置页面,用来编辑配置文件。
    • 新增任务计划页面,用来执行定时任务。
    • 新增日志查看页面,用来查看任务执行日志。
  • 🔧 修改代码逻辑

    • 去除环境变量,所有参数通过/app/config.json来配置(参考前面得配置文件说明)。
    • 新增系统CRON和Python调度器来执行CRON任务,彻底解决5、6位CRON的问题。
    • 初次登录会自动生成所有得容器yaml文件,保存在/app/compose目录下。
  • 🐛 修复已知问题

    • 解决多个稳定性和兼容性问题
    • 改进错误处理和异常捕获机制
    • 优化代码注释和函数级文档

2025-07-03(v1.0.5)

  • 修复了volumes挂载权限处理逻辑,移除不必要的:rw后缀,只在只读模式时添加:ro后缀
  • 优化了healthcheck的CMD-SHELL格式处理,确保生成符合Docker Compose规范的配置
  • 改进了volumes处理逻辑,使生成的compose文件更简洁,符合Docker Compose最佳实践
  • 添加了healthcheck处理过程的调试日志输出,便于跟踪问题
  • 完善了代码注释和错误处理逻辑
  • 修复了cron表达式的时区问题,确保定时任务在正确的时区执行
  • 修复了extra_hosts配置处理,现在能够正确从容器的HostConfig.ExtraHosts获取配置

2025-06-04(v1.0.4)

  • 改进了macvlan网络配置处理,现在能够正确导出IPv4地址、IPv6地址和MAC地址
  • 优化了volumes处理逻辑,支持中文路径,确保在生成的compose文件中保留原始路径
  • 修复了链接处理逻辑,现在能够正确处理容器链接格式
  • 改进了YAML生成逻辑,使用自定义Dumper类确保正确的缩进格式
  • 添加了更多错误处理和日志输出,便于调试和跟踪处理过程

2025-05-05(v1.0.3)

  • 添加了command、entrypoint的生成,若环境变量配置NAS配置为ZOS,则不生成
  • 添加了环境变量:NAS、CRON、TZ、NETWORK
  • 支持定时执行,支持标准CRON表达式;支持一次性任务执行(CRON=once)
  • 重新修改yaml文件生成路径,在./compose/路径下,按YYYY-MM-DD-HH-MM时间戳组织输出文件
  • 完善日志输出内容;完善README.md
  • 创建Github Action,自动构建并推送到github和阿里云
  • 适配 amd64/arm64/arm7 架构

About

把存量docker 转换为compose.yaml

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors 4

  •  
  •  
  •  
  •