Docker Compose 生成器

手写 docker-compose.yml 意味着要记住精确的缩进、为每个端口映射加上引号,还要知道你的 Compose 程序识别哪个版本字符串。本生成器让你通过简单的字段定义服务:名称、镜像、宿主机:容器端口映射和卷。输出符合现代 Compose 规范(不含 version 键)的有效 YAML 文件,并附带合理的默认值。

如何构建 Compose 文件

  1. 1

    添加服务

    为每个服务设置名称、镜像、宿主机:容器端口映射和卷。已有两个示例服务填好。

  2. 2

    调整或删除行

    直接编辑任意字段,用 + Service 按钮添加另一个服务,或删除不需要的行。

  3. 3

    检查生成的 YAML

    预览会随输入实时更新:端口映射会加上引号,version 键会被省略,符合现代 Compose 规范。

  4. 4

    复制文件

    复制生成的 docker-compose.yml,粘贴到项目根目录。

现代 Compose 规范

Compose V2(随 Docker Desktop 和现代 Docker Engine 提供的插件)遵循 Compose 规范version: 键已被弃用,生成器会省略它。顶层键为 servicesnetworksvolumesconfigssecrets

服务结构

一个接近生产环境的服务长这样:

services:
  web:
    image: nginx:1.27-alpine
    restart: unless-stopped
    ports:
      - "80:80"
    volumes:
      - ./public:/usr/share/nginx/html:ro
    depends_on:
      app:
        condition: service_healthy
    networks:
      - frontend
      - backend
    healthcheck:
      test: ["CMD", "wget", "--spider", "-q", "http://localhost/health"]
      interval: 30s
      timeout: 5s
      retries: 3

卷:绑定挂载与命名卷

  • 绑定挂载./app:/var/www)把容器绑定到宿主机上的路径,本地开发非常方便,因为改动会立即生效。
  • 命名卷pgdata:/var/lib/postgresql/data)由 Docker 管理,独立于任何宿主机路径,适合数据库以及任何你不希望被 rm -rf 误删的内容。
  • 匿名卷 - 应避免。它能撑过重启,但执行 docker compose down -v 时会毫无提示地消失。

网络

默认情况下 Compose 会创建一个以项目命名的网络,并把每个服务连接上去。在以下情况显式声明网络很有用:

  • 你想把数据库与面向公网的服务隔离。
  • 你需要带自定义子网的 bridge,以对接现有基础设施。
  • 你想把容器接入已存在的外部网络(external: true)。

应避免的常见错误

  • version 键冲突。 顶部的 version: "3.8" 会让 healthcheck 的 start_interval 等新功能在旧版 Compose 上失效;生成器会省略 version 键。
  • 端口引号。 8080:80 在某些边界情况下会被解析为 YAML 的 60 进制数;生成器始终为端口映射加引号。
  • 硬编码的密钥。 直接写进 compose.yml 的密钥最终会被提交到 git。请把它们放在 env_file 或平台的密钥存储中。
  • 没有条件的 depends_on。 简单的 depends_on: [db] 只等容器启动,不等服务就绪。请使用 condition: service_healthy 并为依赖项添加健康检查。

常见问题

当前的 Compose 规范(与 Docker Compose V2 一致)。文件省略 version: 键,这是现代 Compose 文件的写法。适用于 Docker Compose V2.22 及以上版本。

此版本的表单暂不支持。生成器专注于包含镜像、端口和卷的服务定义。你可以在使用前手动为生成的 YAML 添加网络、环境变量、健康检查等键。

不会,此工具专注于 compose.yml。需要 Dockerfile 时,请使用 Dockerfile 生成器,它负责五种技术栈的基础镜像选择和 COPY/RUN 顺序。

不会。服务定义仅用于在此页面生成 YAML,不会被保存、上传或分享。

相关工具

此工具还提供其他语言版本