如何将反引号传递给Dockerfile CMD?

时间:2019-05-07 11:21:07

标签: linux docker dockerfile

我有一个运行Java应用程序的docker映像,其主类是动态的,位于一个名为start-class的文件中。传统上,我是这样启动应用程序的。

java <some_options_ignored> `cat start-class`

现在,我想在Docker容器中运行这些应用程序。这是我的Dockerfile。

FROM openjdk:8
##### Ignored
CMD ["java", "`cat /app/classes/start-class`"]

我构建了图像并运行了容器。实际执行的命令是这样。

$ docker ps --no-trunc | grep test
# show executed commands
"java '`cat /app/classes/start-class`"

单引号自动反引号引起来。我该如何解决?

1 个答案:

答案 0 :(得分:2)

您正在尝试在没有外壳的情况下运行外壳命令(扩展子命令)(CMD的json / exec语法)。您需要切换到Shell语法(或使用exec语法显式运行Shell)。看起来像:

CMD exec java `cat /app/classes/start-class`

没有json格式,docker将运行

sh -c "exec java `cat /app/classes/start-class`"

在这种情况下,exec将用Java进程替换pid 1中的shell,以改善信号处理。