如何在Docker ENTRYPOINT中使用撰写环境变量

诺氏先生

环境变量在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(和CMDRUN)将扩大环境变量,但你不能使用shell格式:您正在使用EXEC形式,它不扩展变量或处理任何其他壳结构。如果删除JSON数组布局并仅指定一个flat命令,则环境变量将按照您期望的方式扩展。

# Without JSON layout
CMD yarn run "app-${ENV_CONFIG_INT:-0}"

(我倾向于选择指定CMDENTRYPOINT。主应用程序的命令有两个方面的原因:它更容易覆盖CMD在一个普通的docker run调用,并有使用的一个有用的模式,ENTRYPOINT作为一个包装脚本,做一些初始设置,然后运行CMD。 )

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章