Docker Compose创建多个同服务Redis容器执行scale命令报错如何解决
问题解决方案
问题根源
报错的核心原因是redis服务配置了固定的container_name和hostname,Docker要求所有运行的容器名称全局唯一,执行--scale扩容命令时,多个实例会尝试使用同一个固定名称,因此触发冲突。
操作步骤
1. 修改docker-compose.yml配置
删除redis服务下固定的container_name、hostname配置,修改后的完整配置参考如下:
version: '3' services: redis: image: redis redis-commander: container_name: redis-dbms hostname: redis-commander image: rediscommander/redis-commander:latest restart: always environment: # 若需要Redis Commander识别所有扩容的Redis实例,使用如下配置 - REDIS_HOSTS=node1:redis_1:6379,node2:redis_2:6379,node3:redis_3:6379 ports: - "8081:8081"
2. 清理历史冲突容器
执行以下命令删除之前已经创建的重名Redis容器,避免后续操作依然报错:
docker rm -f redis
3. 执行扩容命令
重新执行scale命令即可成功创建3个Redis实例:
docker-compose up --scale redis=3 -d
补充说明
- 删除固定容器名后,Docker Compose会自动为每个Redis实例生成唯一名称,格式为
[当前项目名]_redis_[实例序号],无需手动配置 - 如果需要给Redis配置端口映射,不要写固定映射规则如
"6379:6379",仅需写"6379"即可,Docker会自动为每个实例分配随机宿主机端口,避免端口冲突 - 扩容后你可以执行
docker-compose ps查看所有运行中的Redis实例状态
内容的提问来源于stack exchange,提问作者Mario Almaguer
相关产品推荐
相关产品推荐

