我在同一台机器上同时启动 Ragflow 和 Dify 时,出现了 Redis 容器冲突的问题。表现为:当两个服务都启动后,其中一个服务的 Redis 容器会被删除,导致该服务无法正常访问。此外,在 Dify 的 Docker 目录下执行 docker compose down 时,会删除 Ragflow 的 Redis 容器。
问题原因:
起初,我怀疑是端口冲突或容器名称冲突导致的问题。然而,经过进一步排查,发现根本原因在于 Docker Compose 未指定项目名称。
Docker Compose 使用 项目名称 来隔离不同的项目环境。
默认情况下,项目名称是 docker-compose.yml 文件所在目录的名称。由于 Ragflow 和 Dify 的 docker-compose.yml 文件都位于各自项目目录的 docker/ 目录下,导致两个服务的容器未能被有效隔离,从而引发冲突。
解决方案:
ragflow 基础docker服务启动方式不变。
dify启动时候要通过 -p 参数显式指定项目名称!!!
详细步骤:
拿我自己举例。
ragflow我是源码启动的,启动基础服务这一步就还是在docker目录下运行:
docker compose -f docker-compose-base.yml up -d
dify我是docker部署的,直接在docker文件夹下运行:
docker compose -p dify_docker up -d
这样两个项目的相关docker服务应该就都启动成功了。
关于端口会不会冲突的问题:
成功后使用
docker ps -a –format "table {{.Names}}\\t{{.Status}}\\t{{.Ports}}" | grep redis
查看这两个容器状态输出如下:
-
dify_docker-redis-1 容器只暴露了容器内部的 6379 端口,但没有映射到主机端口(6379/tcp 表示仅容器内部使用)。
-
ragflow-redis 容器将容器内部的 6379 端口映射到了主机的 6379 端口。
ragflow-redis 占用了主机的 6379 端口,那么其他容器不能再映射到主机的 6379 端口,但 dify_docker-redis-1 没有映射到主机端口,因此不会冲突。
评论前必须登录!
注册