<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/ DTD/wml_1.1.xml">

<wml>
<head>
<meta http-equiv="cache-control" content="max-age=180,private" />
</head>
<card title="Docker Compose 生成器（把容器转换成对应的docker-compose.yaml文件）">
<p>
作者:<a href="index.php?action=showuser&amp;userid=1&amp;hash=">admin</a><br />时间:2025-05-26 15:06<br />分类:<a href="index.php?action=list&amp;cid=3&amp;hash=">电脑技术</a><br />内容:


Docker Compose 生成器（把容器转换成对应的docker-compose.yaml文件）


Github:https://github.com/coracoo/docker2compose


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

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

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

功能特点




XML/HTML代码


    读取系统中所有Docker容器信息

    分析容器之间的网络关系（自定义network和link连接）

    根据网络关系将相关容器分组

    为每组容器生成对应的docker-compose.yaml文件（根据首个容器名称）

    支持提取容器的各种配置，包括：容器名称、镜像、端口映射、环境变量、数据卷(volume/bind)、网络(host/bridge/macvlan单独配置，其它网络根据名称在一起)、重启策略、特权模式、硬件设备挂载、cap_add 能力、性能限制(极空间暂不支持，暂时移除)、command和entrypoint(在ZOS系统中不生成) 、健康检测、其他配置等等




使用方法


1、通过compose部署（推荐）


启用前确保系统安装了docker


docker cli




XML/HTML代码


    docker run -itd --name d2c \

      -v /var/run/docker.sock:/var/run/docker.sock:ro \

      -v /{path}:/app/compose \

      -e NAS=debian \ # 可选，默认debian，详见下文说明

      -e CRON=&quot;0 */12 * * *&quot; \ # 可选，默认每天0点起，每天12小时执行一次，详见下文说明

      -e NETWORK=true \ # 可选，默认true，详见下文说明

      -e TZ=Asia/Shanghai \ # 可选，默认Asia/Shanghai

      # 阿里云镜像源，国内选择

      crpi-xg6dfmt5h2etc7hg.cn-hangzhou.personal.cr.aliyuncs.com/cherry4nas/d2c:latest

      # github镜像源

      # ghcr.io/coracoo/d2c:latest







docker-compose.yaml




XML/HTML代码


    services:

      d2c:

        # 阿里云镜像源，国内选择

        image: crpi-xg6dfmt5h2etc7hg.cn-hangzhou.personal.cr.aliyuncs.com/cherry4nas/d2c:latest

        # github镜像源

        # image: ghcr.io/coracoo/d2c:latest

        container_name: d2c

        volumes:

          - /var/run/docker.sock:/var/run/docker.sock:ro

          - /{path}:/app/compose

        environment:

          - NAS=debian

          - CRON=&quot;0 */12 * * *&quot;

          - NETWORK=true

          - TZ=Asia/Shanghai







环境变量说明


XML/HTML代码


    NAS: 指定NAS系统类型

        debian: 默认值，生成完整配置

        zos: 极空间系统，不生成command和entrypoint配置

    CRON: 定时执行配置，使用标准cron表达式，示例：0 2 * * *（每天凌晨2点执行）

        默认值：0 */12 * * *（每天0点起，每天12小时执行一次）

        once: 执行一次后退出

    NETWORK: 控制bridge网络配置的显示方式

        true: 默认值，显式配置bridge网络模式，即新创建的compose还是在bridge网络下

        false: 隐式配置bridge网络模式，即新创建的compose会遵循compose的逻辑，创建新的网络

    TZ: 时区，用于定时执行

        默认值：Asia/Shanghai

    输出目录说明

       /app/compose: 脚本输出目录，默认值为/app/compose

       YYYY_MM_DD_HH_MM: 脚本执行时间，格式为YYYY_MM_DD_HH_MM，例如2023_05_04_15_00





2、直接运行（需要Python环境）


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

确保系统中已安装Python 3和Docker


确保脚本有执行权限


chmod +x d2c.py


安装python所需的依赖包


pip install -r requirements.txt


运行脚本


./run.sh


脚本会在当前目录下创建一个compose文件夹，并在其中生成docker-compose.yaml文件


输出说明


对于单个独立的容器，生成的文件名格式为：{容器名}.yaml


对于有网络关系的容器组，生成的文件名格式为：{第一个容器名前缀}-group.yaml


所有生成的文件都会保存在compose/时间戳目录下


注意事项


该工具需要Docker命令行权限才能正常工作


生成的docker-compose.yaml文件可能需要手动调整以满足特定需求


对于使用默认bridge网络但没有显式link的容器，它们可能会被分到不同的组中


工具会将自定义网络标记为external: true，因为它假设这些网络已经存在


通过Docker运行时，会将宿主机的Docker套接字挂载到容器中，以便获取容器信息


工具支持定时执行，默认每12小时执行一次，可通过CRON环境变量自定义执行时间




此程序适合你需要大批量转移容器时候，又忘记了之前完整命令，或者快速启动容器，或者学习写docker-compose的情况。 
</p><p>
<a href="index.php?action=login&amp;hash=">立即登陆发表评论</a><br />
</p>
<p><a href="index.php?action=list&amp;hash=">返回日志列表</a><br /><a href="index.php?action=index&amp;hash=">返回主页</a></p>
</card>
</wml>
