使用docker-compose挂载本地目录为卷时Redis配置文件映射失败求助
Redis主从容器启动失败:配置文件映射错误排查与解决
问题场景
尝试通过docker-compose挂载项目根目录下的配置文件到Redis主从容器,分发配置文件。当前Redis服务配置如下:
# Redis redis-master/slave configurations redis-master: container_name: "redis-master" image: redis/redis-stack:7.0.2-RC3 networks: - redis - api command: - "redis-server /etc/master.conf" volumes: - ./redis/clustering/redis-master/master.conf:/etc/master.conf - ./redis_data/redis-master/:/data/ redis-slave-0: container_name: "redis-slave-0" image: redis/redis-stack:7.0.2-RC3 networks: - redis - api command: - "redis-server /etc/slave.conf" volumes: - ./redis/clustering/redis-slave/slave.conf:/etc/slave.conf - ./redis_data/redis-slave-0/:/data/ redis-slave-1: container_name: "redis-slave-1" image: redis/redis-stack:7.0.2-RC3 networks: - redis - api command: - "redis-server /etc/slave.conf" volumes: - ./redis/clustering/redis-slave/slave.conf:/etc/slave.conf - ./redis_data/redis-slave-1/:/data/
目录结构(docker-compose.yml与redis目录同级):
redis ├── clustering │ ├── redis-master │ │ └── master.conf │ ├── redis-slave │ │ └── slave.conf │ └── sentinel │ └── sentinel.conf └── redis-reference.conf 4 directories, 4 files
启动时出现错误,核心报错信息:
ERROR: for redis-master Cannot start service redis-master: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: exec: "redis-server /etc/master.conf": stat redis-server /etc/master.conf: no such file or directory: unknown
错误原因
根本问题出在command字段的写法上:
- 当前配置把
redis-server /etc/master.conf作为一个单独的数组元素,Docker会尝试查找名为redis-server /etc/master.conf的可执行文件,而非将redis-server作为命令、/etc/master.conf作为参数执行。 - 配置文件的路径映射是正确的,错误提示里的“no such file or directory”指的是错误识别的命令,而非挂载的配置文件。
解决方法
修改每个Redis服务的command字段,采用以下两种正确写法之一即可:
方式1:拆分命令与参数为独立数组元素
redis-master: # 其他配置保持不变 command: - "redis-server" - "/etc/master.conf" redis-slave-0: # 其他配置保持不变 command: - "redis-server" - "/etc/slave.conf" redis-slave-1: # 其他配置保持不变 command: - "redis-server" - "/etc/slave.conf"
方式2:使用单字符串形式
redis-master: # 其他配置保持不变 command: "redis-server /etc/master.conf" redis-slave-0: # 其他配置保持不变 command: "redis-server /etc/slave.conf" redis-slave-1: # 其他配置保持不变 command: "redis-server /etc/slave.conf"
修改后重新执行docker-compose up -d,Redis服务即可正常启动,配置文件也会正确挂载。
内容的提问来源于stack exchange,提问作者3therk1ll
相关产品推荐
相关产品推荐

