问题描述
主持人:Centos 7 Docker版本:19.03.12,内部版本48a66213fe Docker撰写版本:版本1.26.2,构建eefe0d31
我使用here给出的建议在外壳中指定环境变量,然后将其传递到compose文件中。所以我的docker-compose
文件看起来像这样:
version: '3.8'
services:
springboot:
image: <my image>
ports:
- "8445:8445"
depends_on:
- "database"
environment:
- SPRING_PROFILES_ACTIVE=dev
database:
image: "mongo"
这是我遇到的错误:
ERROR: for 39b165c237b9_deploy_springboot_1 Cannot create container for service springboot: invalid volume specification: 'a9d7debde5ffcba2a023c12d5f1e822567e9b4047a1bda76efeefbfc80c1f622:app/data:rw': invalid mount config for type "volume": invalid mount path: 'app/data' mount path must be absolute
相应的Docker文件确实引用了VOLUME app/data
,但这似乎没有争议。
如果我取出environment
块,它似乎可以正常工作(尽管应用程序启动时没有正确的配置,但至少不会出错)。
那么将shell环境变量传递给容器的正确方法是什么?
编辑
感谢@David Maze,它确实是原始Docker文件中的VOLUME声明-与docker-compose
无关。删除它,现在可以使用了。谢谢!
解决方法
有两种方法可以在docker中指定目录。
- 绝对路径,即从根开始的绝对路径,例如/ var / lib
- 相对路径,即相对于撰写文件的相对路径,例如./app/data
尝试将SPRING_PROFILES_ACTIVE=dev
替换为SPRING_PROFILES_ACTIVE: dev
,而将=
替换为:
。并且您还应该将volume
添加到docker-compose
文件中:
version: "3.8"
services:
.
.
volumes:
- Path/to/your/volume
environment:
ENV_VAR1: Value1
ENV_VAR2: Value2
.
.
.
根据错误消息,路径必须是绝对路径。