Coolify logoCoolify
Coolify 横幅

Docker Compose 允许您轻松部署多个 Docker 容器并进行配置。

使用 Docker Compose 构建包,您可以使用自己的 Docker Compose 文件(即 docker-compose.y[a]ml)作为唯一的事实来源,从而在 Coolify 上完全控制应用程序的构建和部署方式。

如何使用 Docker Compose?

1. 在 Coolify 中创建新资源

在 Coolify 仪表板上,打开您的项目并单击 创建新资源 按钮。

Coolify 仪表板截图

2. 选择您的部署选项

Coolify 仪表板截图

A. 如果您的 Git 仓库是公开的,请选择 公共仓库 选项。

B. 如果您的仓库是私有的,您可以选择 Github App部署密钥。(这些方法需要额外的配置。如有需要,您可以查看有关设置 Github App部署密钥 的指南。)

3. 选择您的 Git 仓库

如果您使用的是公共仓库,请在提示时粘贴您的 GitHub 仓库 URL。其他选项的步骤非常相似。

Coolify 仪表板截图

4. 选择构建包

Coolify 默认使用 Nixpacks。单击 Nixpacks 选项,并从下拉菜单中选择 Docker Compose 作为您的构建包。

Coolify 仪表板截图

5. 配置构建包

Coolify 仪表板截图
  • 分支: Coolify 将自动检测您仓库中的分支。
  • 基础目录: 输入 Coolify 应用作根目录的目录。如果文件位于根目录,请使用 /,或者指定子文件夹(例如,对于 monorepo 使用 /backend)。
  • Docker Compose 位置: 输入您的 Docker Compose 文件的路径,此路径将与基础目录结合。确保文件扩展名完全匹配,否则 Coolify 将无法加载它。

设置好上述所有设置后,单击 继续 按钮。

使服务对外部世界可用

在知识库中阅读有关 将服务暴露给互联网 的更多信息。

高级配置

使用环境变量和共享变量

在 Coolify 中,您可以按照 Docker Compose 知识库 中的详细说明轻松配置这些变量。

存储

您可以在 compose 文件中设置存储,并添加一些 Coolify 的额外选项。

创建空目录

定义带有主机绑定的目录,并通知 Coolify 创建它们:

services:
  filebrowser:
    image: filebrowser/filebrowser:latest
    volumes:
      - type: bind
        source: ./srv
        target: /srv
        is_directory: true # 指示 Coolify 创建目录。

创建带有内容的文件

指定具有预定义内容的文件,甚至包括来自环境变量的动态值:

services:
  filebrowser:
    image: filebrowser/filebrowser:latest
    environment:
      - POSTGRES_PASSWORD=password
    volumes:
      - type: bind
        source: ./srv/99-roles.sql
        target: /docker-entrypoint-initdb.d/init-scripts/99-roles.sql
        content: |
          -- 注意:在生产环境中请更改这些密码!
           \set pgpass `echo "$POSTGRES_PASSWORD"`

           ALTER USER authenticator WITH PASSWORD :'pgpass';
           ALTER USER pgbouncer WITH PASSWORD :'pgpass';

从健康检查中排除

如果某个服务不应参与整体健康检查(例如,一次性迁移服务),请将 exclude_from_hc 选项设置为 true

services:
  some-service:
    exclude_from_hc: true
    ...

网络

当您部署 Docker Compose 堆栈时,Coolify 会自动为堆栈中的所有服务创建一个隔离的桥接网络(以您的资源 UUID 命名,例如 ewc08w0)。所有服务都可以使用其服务名称作为主机名相互通信(例如 http://backend:8080)。

Coolify 还将其反向代理(Traefik)连接到此网络,以便将外部流量路由到您的服务。

不要定义自定义网络

警告

如果您的 docker-compose.yml 定义了自定义网络,请删除它们。定义自定义网络会导致间歇性中断,使您的应用程序无法通过 HTTPS 访问。

例如,请不要这样做:

services:
  frontend:
    networks:
      - my-network
  backend:
    networks:
      - my-network

networks:
  my-network:
    driver: bridge

当您定义自定义网络时,您的容器将同时位于两个网络上——Coolify 管理的网络和您的自定义网络。Traefik 仅位于 Coolify 管理的网络上,但会非确定性地选择路由到哪个网络 IP。如果它选择了自定义网络 IP,则无法访问您的容器,请求将无限挂起或返回 504 网关超时

此行为是间歇性的——它可能在一次部署后正常工作,而在下一次部署后失效,具体取决于 Traefik 选择的 IP。请参阅 #4483#6215#6153

相反,只需完全删除 networks: 部分:

services:
  frontend:
    ...
  backend:
    ...

Coolify 自动创建的网络已经提供了服务间通信。

连接到预定义网络

默认情况下,每个 compose 堆栈都部署在以您的资源 UUID 命名的单独网络中。这种设置允许堆栈中的每个服务相互通信。

如果您想连接不同堆栈中的服务(例如,将应用程序链接到单独的数据库),请在您的服务堆栈页面上启用 连接到预定义网络 选项。

请注意,在引用另一个堆栈中的服务时,您必须使用全名(例如 postgres-<uuid>)。

原始 Docker Compose 部署

对于高级用户,Coolify 提供了“原始 Compose 部署”模式。此选项允许您直接部署 Docker Compose 文件,而无需 Coolify 的大多数额外配置。

注意

此模式旨在供熟悉 Docker Compose 的高级用户使用。

标签

Coolify 会自动将以下标签添加到您的应用程序(如果尚未设置):

labels:
  - coolify.managed=true
  - coolify.applicationId=5
  - coolify.type=application

要启用 Coolify 的代理(Traefik),还需包含以下标签:

labels:
  - traefik.enable=true
  - "traefik.http.routers.<unique_router_name>.rule=Host(`shadowarcanist.com`) && PathPrefix(`/`)"
  - traefik.http.routers.<unique_router_name>.entryPoints=http

构建参数

在使用 Docker Compose 构建镜像时,Coolify 可以将构建参数注入到您的构建过程中。您可以在应用程序的 高级 菜单中配置这些设置。

将构建参数注入 Dockerfile

控制 Coolify 是否在构建过程中自动注入构建参数。如果您想在 Dockerfile 中完全控制构建参数,请在高级菜单中禁用此选项。

  • 启用(默认): Coolify 自动注入构建参数
  • 禁用: 您在 Dockerfile 中自行管理 ARG 语句

在构建中包含源代码提交

控制是否在构建中包含 SOURCE_COMMIT 变量(Git 提交哈希)。默认情况下禁用此选项,以保留提交之间的 Docker 构建缓存。如果您的构建过程需要提交哈希,您可以在高级菜单中启用它。

  • 禁用(默认): 不包含 SOURCE_COMMIT,提高缓存利用率
  • 启用:SOURCE_COMMIT 作为构建参数包含在内

构建缓存优化

如果构建缓存在部署之间未被保留,请确保“在构建中包含源代码提交”已禁用。SOURCE_COMMIT 值会随着每次提交而更改,从而导致缓存失效。

已知问题及解决方案

On this page