在Docker的日常使用中,我们常常遇到这样的场景:通过反复调试docker run命令启动了一个包含复杂参数的容器(比如挂载了多个卷、设置了环境变量、配置了网络端口),最终需要将其转化为可复用的docker-compose.yml文件。

https://mp.weixin.qq.com/s/L22-J6xf2UO1_adsr7sPhQ

开源地址
https://github.com/coracoo/docker2compose

手动转换不仅耗时,还容易遗漏参数。今天介绍的coracoo/docker2compose开源项目,正是为解决这一痛点而生——它能将复杂的docker run命令智能转换为完整的Docker Compose配置!

简介
docker2compose是一个开源的 Docker Compose 文件生成工具。它的核心功能是读取 NAS 或服务器中已运行的 Docker 容器信息,自动分析容器间的网络关系,并根据规则生成对应的docker-compose.yaml文件。

这款工具的设计初衷是解决极空间私有云用户的容器迁移痛点,但实际上兼容主流 NAS 系统和 Linux 服务器,甚至支持 ARM 架构设备(如树莓派)。

功能特点
读取系统中所有Docker容器信息
分析容器之间的网络关系(自定义network和link连接)
根据网络关系将相关容器分组
为每组容器生成对应的docker-compose.yaml文件(根据首个容器名称)
支持提取容器的各种配置,包括:
容器名称
镜像
端口映射
环境变量
数据卷(volume/bind)
网络(host/bridge/macvlan单独配置,其它网络根据名称在一起)
重启策略
特权模式
硬件设备挂载
cap_add 能力
command和entrypoint(在ZOS系统中不生成)
健康检测
其他配置等等
实战
场景
从一条命令到生产级Compose配置

假设我们调试出一个启动PostgreSQL容器的命令:

docker run -d \
  --name db \
  -v pgdata:/var/lib/postgresql/data \
  -e POSTGRES_PASSWORD=secret \
  -p 5432:5432 \
  --network myapp \
  postgres:15

使用docker2compose转换

docker2compose “docker run …” > docker-compose.yml
输出结果

version: '3.8'
services:
db:
    image:postgres:15
    container_name:db
    environment:
      -POSTGRES_PASSWORD=secret
    volumes:
      -pgdata:/var/lib/postgresql/data
    networks:
      -myapp
    ports:
      -"5432:5432"

volumes:
pgdata:

networks:
myapp:
    driver:bridge

写在最后
Docker Compose已成为本地开发和测试环境的事实编排标准,其声明式配置带来的可重复性和可维护性是脚本难以比拟的。docker2compose通过弥合命令式调试(docker run)与声明式配置(YAML)之间的鸿沟,显著降低了Compose的采用门槛。

无论是刚接触容器的新手,还是管理复杂微服务架构的资深工程师,这个不足10MB的小工具都可能成为你效率提升的“秘密武器”。

文档更新时间: 2025-05-31 08:13   作者:admin