这是我的docker compose文件,其中我动态声明了redis服务和卷
redis:
container_name: redis-${ENV}
image: redis
command: --port ${REDIS_PORT}
ports:
- "${REDIS_PORT}:6379"
volumes:
- redis-${ENV}:/data
networks:
- app
volumes:
redis:
name: redis-${ENV}
external: false
字符串
我得到错误:service "redis" refers to undefined volume redis-dev: invalid compose project
2条答案
按热度按时间2lpgd9681#
一旦我让你的
docker-compose.yml
工作,通过删除未定义的app
网络,这是不相关的,并添加缺失的services
部分:字符串
我得到了和你一样的输出:
型
我认为问题是你假设你可以通过它的
name
属性的值来引用这个卷。这只是一个标签,但它的标识符仍然是redis
,不能用环境变量插值(没有键,只有值)。换句话说,我不认为你想做的事情可以完成,至少不只是在
docker-compose.yml
文件中。你可以通过在外部创建卷,然后将其用作外部卷来实现这一点。0dxa2lsx2#
这两个名字必须匹配:
字符串
请注意,Compose能够自己构造卷和容器名称。它使用项目名称作为名称的一部分,因此生成的名称最终看起来与您指定的名称非常相似,只要您使用
docker-compose -p dev
选项或类似选项。您可以在整个文件中删除手动名称设置和${ENV}
的提及。如果您还让每个Redis示例在其容器内使用其标准端口6379(容器网络隔离意味着不会有冲突)并使用Compose-provided
default
网络,则可以将其减少到型