首页 > 解决方案 > Docker 运行 ENTRYPOINT 不替换环境变量

问题描述

我有一个入口点,如此处所示

ENTRYPOINT /usr/bin/java ... /usr/path/$FILE

我正在尝试在启动容器时传递环境变量

-e FILE=myfile.txt

但是,这个值似乎没有被替换。Java 抛出一个异常,即/usr/path is a directory. 如果我在 dockerfile 中使用文件名对入口点进行硬编码,则它可以正常工作。

ENTRYPOINT /usr/bin/java ... /usr/path/myfile.txt

它确认 $FILE 未被替换。

如何解决这个问题?

笔记:

有趣的是 docker-compose 工作得很好!!

environment:
  - FILE=myfile.txt

标签: docker

解决方案


为了确保您正确使用的shell 形式ENTRYPOINT确实替换了环境变量$FILE,请添加exec

ENTRYPOINT exec /usr/bin/java ... "/usr/path/$FILE"

然后检查你的docker run -e FILE=xxx yourImage工作是否有效。

这假设您的 Dockefile 包含一个ENV FILE aDefaultFile指令,以便docker run -e工作。


推荐阅读