Docker Compose报错:Redis服务引用未定义卷redis-dev,项目无效
问题原因
你遇到的错误是因为Docker Compose无法识别服务里引用的redis-${ENV}卷:
- 服务的
volumes字段里写的是redis-${ENV}:/data,当ENV=dev时会解析为redis-dev:/data - 但你在
volumes块里定义的卷键名是redis,不是redis-dev,Compose是通过卷的键名来匹配关联的,和name属性无关,所以会提示卷未定义。
解决方案
有两种可行的修改方式:
方案一:统一卷的引用键名(推荐)
修改服务里的卷引用,指向volumes块里定义的redis键,通过name属性动态生成实际卷名:
redis: container_name: redis-${ENV} image: redis command: --port ${REDIS_PORT} ports: - "${REDIS_PORT}:6379" volumes: - redis:/data # 改为引用volumes块里的redis键 networks: - app volumes: redis: name: redis-${ENV} # 实际创建的卷名由ENV变量决定 external: false networks: app: # 补充定义app网络,避免网络未定义错误
方案二:动态生成卷的键名
如果坚持要在服务里用redis-${ENV}作为卷引用,可以把volumes块的键名也改成动态的:
redis: container_name: redis-${ENV} image: redis command: --port ${REDIS_PORT} ports: - "${REDIS_PORT}:6379" volumes: - redis-${ENV}:/data networks: - app volumes: redis-${ENV}: # 用ENV变量作为卷的键名,和服务引用一致 external: false networks: app:
额外注意事项
- 确保环境变量已正确设置:可以通过
export ENV=dev和export REDIS_PORT=6379临时设置,或者创建.env文件存放这些变量,Compose会自动加载。 - 不要忘记定义
app网络,否则运行时会出现网络未定义的错误。
内容的提问来源于stack exchange,提问作者kittu
相关产品推荐
相关产品推荐

