如何在Docker的指令字符串中正确使用注入的环境变量
问题原因
你当前使用的是CMD的exec数组语法,该语法默认不会启动shell解释器,因此不会处理$开头的环境变量占位符,只会将$VERSION作为普通字符串传递。
解决方法
你可以选择以下任意一种方式实现环境变量解析:
- 方法1:改用shell格式的CMD
直接去掉数组括号,写法如下:
CMD datomic-pro-$VERSION/bin/transactor config/samples/dev-transactor-template.properties
Docker会自动以sh -c的形式执行该命令,环境变量会被正常解析。
- 方法2:exec格式手动指定shell
如果你需要保留exec数组写法,手动调用sh执行命令即可:
CMD ["sh", "-c", "datomic-pro-$VERSION/bin/transactor config/samples/dev-transactor-template.properties"]
额外注意事项
- 你当前的Dockerfile中没有声明
VERSION变量,需要根据使用场景补充声明:- 如果版本在构建时确定,可通过
ARG参数传入:在Dockerfile合适位置补充ARG VERSION,构建时执行docker build --build-arg VERSION=你的版本号 .即可传入 - 如果版本需要在容器运行时修改,需要额外将ARG赋值给ENV:补充
ENV VERSION=${VERSION},运行时可以通过docker run -e VERSION=你的版本号 镜像名覆盖版本值
- 如果版本在构建时确定,可通过
- 你原Dockerfile的CMD行存在多余的换行和空白字符,调整时记得清理避免执行报错。
内容的提问来源于stack exchange,提问作者zendevil.eth
相关产品推荐
相关产品推荐

