环境变量在ENTRYPOINT中似乎不起作用。据我了解,ENTRYPOINT的shell形式将在运行时扩展ENV变量,但是在以下示例中,这似乎不适用于ENV_CONFIG_INT。在以下示例中,我做错了什么?
Docker文件
ENTRYPOINT [ "yarn", "run", "app-${ENV_CONFIG_INT}" ]
撰写Yaml
test:
image: testimage/test:v1.0
build:
context: .
dockerfile: Dockerfile
env_file:
- ./docker.env
environment:
- ENV_CONFIG_INT=1
错误:
error Command "app-${ENV_CONFIG_INT}" not found.
用静态整数int 1替换该值可解决此问题,但是我希望该值在运行时是动态的。
提前致谢。
我不会尝试使用环境变量来指定要运行的命令。从Dockerfile中删除显示的行,而是command:
在docker-compose.yml
文件中指定:
test:
image: testimage/test:v1.0
build: .
env_file:
- ./docker.env
command: yarn run app-1 # <--
当你注意,壳形式的ENTRYPOINT
(和CMD
和RUN
)将扩大环境变量,但你不能使用shell格式:您正在使用EXEC形式,它不扩展变量或处理任何其他壳结构。如果删除JSON数组布局并仅指定一个flat命令,则环境变量将按照您期望的方式扩展。
# Without JSON layout
CMD yarn run "app-${ENV_CONFIG_INT:-0}"
(我倾向于选择指定CMD
给ENTRYPOINT
。主应用程序的命令有两个方面的原因:它更容易覆盖CMD
在一个普通的docker run
调用,并有使用的一个有用的模式,ENTRYPOINT
作为一个包装脚本,做一些初始设置,然后运行CMD
。 )
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句