1. 背景

在同一台服务器上同时启动 Dify 和 Ragflow 时,可能会遇到 Redis 容器冲突的问题。具体表现为:当两个服务都启动后,其中一个服务的 Redis 容器可能会被删除,导致该服务无法正常访问。此外,在 Dify 的 Docker 目录下执行 docker compose down 时,可能会意外删除 Ragflow 的 Redis 容器。

2. 问题原因

导致此问题的根本原因在于 Docker Compose 未指定项目名称。Docker Compose 使用项目名称来隔离不同的项目环境。默认情况下,项目名称是 docker-compose.yml 文件所在目录的名称。由于 Ragflow 和 Dify 的 docker-compose.yml 文件都位于各自项目目录的 docker/ 目录下,导致两个服务的容器未能被有效隔离,从而引发冲突。

3. 解决方案

在启动 Dify 时,通过 -p 参数显式指定项目名称,以避免与 Ragflow 的容器发生冲突。

  1. 启动 Ragflow: 在 Ragflow 的 docker 目录下,运行以下命令启动基础服务:
    1
    docker compose -f docker-compose-base.yml up -d
  2. 启动 Dify: 在 Dify 的 docker 目录下,运行以下命令启动服务,并显式指定项目名称:
    1
    docker compose -p dify up -d
    这样,两个项目的相关 Docker 服务就都能成功启动,并且相互独立,避免了容器冲突的问题。
    关于端口冲突的问题:
    在上述配置下,dify_docker-redis-1 容器只暴露了容器内部的 6379 端口,但没有映射到主机端口(6379/tcp 表示仅容器内部使用);而 ragflow-redis 容器将容器内部的 6379 端口映射到了主机的 6379 端口。由于 dify_docker-redis-1 没有映射到主机端口,因此不会与 ragflow-redis 发生端口冲突。
    通过以上配置,可以确保在同一台服务器上同时运行 Dify 和 Ragflow,而不会发生 Redis 容器的冲突。