gpt4 book ai didi

docker - 如何在 docker ENTRYPOINT 中使用 compose 环境变量

转载 作者:行者123 更新时间:2023-12-05 02:02:55 25 4
gpt4 key购买 nike

环境变量似乎在 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.

将值替换为 1 的静态 int 可以解决问题,但我希望该值在运行时是动态的。

提前致谢。

最佳答案

我不会尝试使用环境变量来指定要运行的命令。从 Dockerfile 中删除显示的行,而是在 docker-compose.yml 文件中指定 command::

test:
image: testimage/test:v1.0
build: .
env_file:
- ./docker.env
command: yarn run app-1 # <--

如您所见,ENTRYPOINT(以及CMDRUN)的 shell form 将扩展环境变量,但您没有使用shell 形式:您使用的是 exec form ,它不会扩展变量或处理任何其他 shell 构造。如果您删除 JSON 数组布局并仅指定一个平面命令,环境变量将按您期望的方式展开。

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

(对于主要应用程序命令,我倾向于指定 CMD 而不是 ENTRYPOINT。这样做有两个原因:覆盖 CMD 在普通的 docker run 调用中,有一种有用的模式,即使用 ENTRYPOINT 作为包装脚本,执行一些初始设置,然后运行 ​​CMD.)

关于docker - 如何在 docker ENTRYPOINT 中使用 compose 环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65562969/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com