🚫 让 Dify Docker 不再自动随 Docker Desktop 启动

94 阅读2分钟

本文记录如何将 Dify 的 docker-compose 配置改为“非自启动模式”,避免 Docker Desktop 每次启动都自动拉起十几个容器。

Dify 官方的 compose 文件默认包含:

restart: always

这会导致所有容器(API / Web / Worker / Sandbox / Redis / Postgres / Weaviate 等)在 Docker Desktop 启动后自动恢复运行。如果你想完全手动控制 Dify 的启动,需要修改这些配置。


1️⃣ 批量修改所有 docker-compose 文件的 restart 策略

进入 Dify 部署目录:

cd D:\dify-main\docker

一次性将所有 restart: always 替换为 restart: "no"

Get-ChildItem -Filter "docker-compose*.yaml" |
ForEach-Object {
    (Get-Content $_.FullName) -replace "restart:\s*always", 'restart: "no"' |
    Set-Content $_.FullName
}

如果存在 unless-stopped 也一起替换:

Get-ChildItem -Filter "docker-compose*.yaml" |
ForEach-Object {
    (Get-Content $_.FullName) -replace "restart:\s*unless-stopped", 'restart: "no"' |
    Set-Content $_.FullName
}

检查替换情况:

Select-String -Path "docker-compose*.yaml" -Pattern "restart"

全部显示 "no" 即成功。


2️⃣ 确保存在 middleware.env 文件

Dify 的 docker-compose.middleware.yaml 依赖:

env_file:
  - ./middleware.env

如果你没有该文件,可从模板创建:

Copy-Item .\middleware.env.example .\middleware.env

(内容不写也可以,compose 会使用默认变量值)


3️⃣ 必须重新创建容器让策略生效

修改 compose 文件不会影响已有容器,需要先删除再重建。

停止并删除 Dify 全部容器:

docker compose -f docker-compose.yaml -f docker-compose.middleware.yaml down

使用新的 restart 策略重新启动:

docker compose -f docker-compose.yaml -f docker-compose.middleware.yaml up -d

4️⃣ 验证 restart 策略是否真正生效

查看 API 容器的重启策略:

docker inspect docker-api-1 | Select-String -Pattern "RestartPolicy" -Context 0,3

正确结果应为:

"RestartPolicy": {
    "Name": "no",
    "MaximumRetryCount": 0
},

或者更专业的检查方式:

docker inspect docker-api-1 |
  ConvertFrom-Json |
  Select-Object -ExpandProperty HostConfig |
  Select-Object RestartPolicy

5️⃣ 使用 docker compose config 再次确认配置(可选)

查看最终渲染后的 compose 配置是否已全部应用:

docker compose config | Select-String -Pattern "restart"

若全部为 "no",说明修改完全成功。


🎉 至此:Dify 不会再自动随 Docker Desktop 启动

修改完成后:

  • Docker Desktop 启动 → Dify 不会自动拉起

  • 你可以手动运行:

    docker compose up -d
    
  • 想停止 Dify:

    docker compose down
    

这是最干净、最可控的部署方式。

docker compose -f docker-compose.yaml -f docker-compose.middleware.yaml up -d
docker compose -f docker-compose.yaml -f docker-compose.middleware.yaml stop