You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在docker run命令的-e参数中传入列表类型环境变量?

Docker run 传入数组类型环境变量的解决方案

报错根因

你遇到的invalid reference format报错是Shell的花括号扩展特性导致的:

  • 不带引号包裹的{a,b,c}结构会被Bash(Amazon Linux2默认Shell)自动拆分为多个独立参数
  • 命令1的DDL_AUTO={update,create,validate}会被扩展为DDL_AUTO=update DDL_AUTO=create DDL_AUTO=validate三个参数
  • 命令2加空格后,Shell会把空格分割的内容识别为独立参数
  • 上述扩展后的多余参数会被Docker解析为镜像名,不符合镜像名小写规则因此报错

可行的传参方案

针对Spring Boot项目,有两种无需修改业务代码的传参方式:

方案1:逗号分隔字符串(最简便)

Spring Boot原生支持将逗号分隔的字符串自动转换为数组/List类型的配置项,直接用引号包裹整个环境变量键值对即可:

docker run -itd --name example_container -e "DDL_AUTO=update,create,validate" -p 80:8080 example_image

方案2:标准JSON数组格式

如果必须使用数组结构的写法,需要用单引号包裹标准JSON数组,避免Shell解析花括号和内部引号:

docker run -itd --name example_container -e 'DDL_AUTO=["update","create","validate"]' -p 80:8080 example_image

注:该方式要求Spring Boot版本支持JSON格式的环境变量注入,Spring Boot 2.0+均默认支持该特性。

内容的提问来源于stack exchange,提问作者Jun

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 22:15:04