我在同一台机器上同时启动 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 没有映射到主机端口,因此不会冲突。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |