跳到主内容
UniKit

Docker Compose

图形化拼装 docker-compose.yml:填写镜像或构建上下文、端口、卷、环境变量、depends_on、重启策略、健康检查与网络,实时预览并一键复制。

浏览器本地运行所有计算都在你的浏览器里完成,数据不会离开本机。

服务列表

每个服务填写镜像或构建上下文;端口、卷、环境变量按行填写,一行一条。

web
api

预览

服务数
2
网络
1
命名卷
1
docker-compose.yml
services:
  web:
    image: "nginx:1.27-alpine"
    restart: unless-stopped
    ports:
      - "8080:80"
    depends_on:
      - api
    networks:
      - app
  api:
    build:
      context: "./api"
    environment:
      - "APP_ENV=production"
      - "PORT=3000"
    volumes:
      - "data:/var/lib/data"
    networks:
      - app
    healthcheck:
      test: ["CMD-SHELL", "curl -f http://localhost:3000/health"]
      interval: 30s
      retries: 3
networks:
  app:
    driver: bridge
volumes:
  data:

输出对齐 Compose 规范,不再写已废弃的顶层 version 字段;命名卷会自动声明到顶层 volumes,服务用到的网络会汇总到 networks。

这个工具能做什么

  • 本地起一套 web + 数据库 + 缓存的开发环境时,按服务逐个填镜像、端口、环境变量,一次得到完整 compose 文件。
  • 把散落的 docker run 参数整理成声明式配置:端口、卷、环境变量、depends_on、重启策略都写在文件里,团队成员直接 docker compose up。
  • 给服务加健康检查与依赖顺序,避免数据库还没起来应用就崩掉。
  • 拿不准 compose 语法时先在这里拼出来,实时预览能立刻发现写错的端口或卷映射格式。

示例

输入

web:镜像 nginx:1.27-alpine、端口 8080:80、网络 app、依赖 db;db:镜像 postgres:16-alpine、环境 POSTGRES_PASSWORD=secret、卷 pgdata:/var/lib/postgresql/data、网络 app

输出

services:
  web:
    image: "nginx:1.27-alpine"
    ports:
      - "8080:80"
    depends_on:
      - db
    networks:
      - app
  db:
    image: "postgres:16-alpine"
    environment:
      - "POSTGRES_PASSWORD=secret"
    volumes:
      - "pgdata:/var/lib/postgresql/data"
    networks:
      - app
networks:
  app:
    driver: bridge
volumes:
  pgdata:

端口、卷、环境变量都用双引号包起来,避免 YAML 把 8080:80 当成数字;命名卷 pgdata 会自动声明到顶层 volumes。

常见问题

为什么生成的文件里没有 version 字段?

从 Compose Specification 开始 version 已经废弃,docker compose v2 读到它只会打印一条警告。现在只需要顶层 services,加上可选的 networks、volumes、configs 等,所以工具不再写这个字段。

depends_on 能保证服务已经就绪吗?

不能。depends_on 只保证启动顺序(先起 db 再起 web),不等待 db 真正可以连接。要让 web 等到数据库就绪,给依赖的服务配健康检查,或在自己的启动脚本里做重试等待。

卷映射为什么有的要声明、有的不用?

形如 ./data:/data 的绑定挂载直接映射宿主机路径,不需要声明;形如 pgdata:/var/lib/postgresql/data 用的是命名卷,必须在顶层 volumes 里声明,否则 Compose 会报错,所以工具会自动补上。

环境变量写成列表和映射有什么区别?

列表写法 KEY=value 与映射写法 KEY: value 在 Compose 里等价,只是映射写法要小心值里的冒号与数字被 YAML 重新解释(例如 yes、1.0)。列表写法更不容易踩坑,所以生成器统一用列表。

生成的 YAML 会因为我填错格式而失效吗?

不会。服务名、端口、卷、环境变量、健康检查都会先校验,格式不对会直接提示具体是哪一类问题(例如端口要形如 8080:80),不会输出一份无法解析的 YAML。

关键词:docker composedocker-compose.ymlcompose generatordocker-compose 生成compose filedepends_onhealthcheckdocker networkdocker volume容器编排多服务yaml 配置

同类工具