传递环境变量时出现“无效的卷规格”

问题描述

主持人: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
   .
   .
   .

   

根据错误消息,路径必须是绝对路径。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...