【问题标题】:How to run shell scripts along with java applications using docker?如何使用 docker 与 java 应用程序一起运行 shell 脚本?
【发布时间】:2019-02-10 12:17:58
【问题描述】:

以下是我的 Dockerfile,我将一个文件夹和两个 java jar 文件复制到图像上,目的是执行复制目录中的脚本文件,然后执行两个 java 应用程序。

FROM openjdk:latest
COPY ./mycluster /dir/latest/
COPY ./app1.jar /dir/latest/
COPY ./app2.jar /dir/latest/ 
CMD ["sh", "-c", "cd /dir/latest/ ;./local_cluster_startup.sh ./;sleep 5 ;java -jar app2.jar;sleep 5;java -jar app1.jar;"]

构建 docker 镜像并运行以下命令 docker container run tryout:nsdap 输出为

sh: 1: cd: can't cd to /dir/latest/
sh: 1: ./local_cluster_startup.sh: not found
Error: Unable to access jarfile app2.jar
Error: Unable to access jarfile app1.jar

谁能告诉我这里做错了什么?

我正在寻找能够执行 java jar 和 shell 脚本的最小 docker 映像。你能帮帮我吗?谢谢

【问题讨论】:

标签: java shell docker dockerfile


【解决方案1】:

使用 WORKDIR (https://docs.docker.com/engine/reference/builder/#workdir) 切换到目录“/dir/latest”。 然后你可以从那个目录运行你的命令

WORKDIR /dir/latest
CMD ["./local_cluster_startup.sh ;sleep 5 ;java -jar app2.jar;sleep 5;java -jar app1.jar;"]

【讨论】:

  • 感谢您的快速响应@Devesh Kumar Singh,现在收到以下错误 docker:来自守护进程的错误响应:OCI 运行时创建失败:container_linux.go:348:启动容器进程导致“exec:\ "./local_cluster_startup.sh /dir/latest/;sleep 5 ;java -jar app1.jar;sleep 5;java -jar app2.jar;\": stat ./local_cluster_startup.sh /dir/latest/;sleep 5 ; java -jar app1.jar;sleep 5;app2.jar;:没有这样的文件或目录”:未知。请问有什么建议吗?
  • 尝试拆分您的命令并将它们作为列表运行 (docs.docker.com/engine/reference/builder/#cmd)
  • 但我仍然面临同样的问题 CMD ["sh","-c","./local_cluster_startup.sh /dir/latest/ && sleep 5 && java -jar app1.jar && sleep 5 && java -jar app2.jar"] ,我用 && 来拆分命令。但我仍然面临 oci 运行时失败的问题。你能告诉我你的评论吗?
  • 您可以通过仅创建 dockerfile 直到 WORKDIR 行来创建 docker,然后通过部署该 docker 映像尝试运行您将在 CMD 列表中运行的一系列命令)。我的意思是拆分命令,如` CMD ["./local_cluster_startup.sh","sleep 5","java jar app1.jar","java jar app2.jar"] `
  • 仍然是同样的问题,如果我将命令分开 - 容器本身没有启动但如果我使用 && 容器正在启动但实际命令没有被执行
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-29
  • 2017-11-15
  • 1970-01-01
相关资源
最近更新 更多