为了账号安全,请及时绑定邮箱和手机立即绑定

从dockerfile构建docker镜像,无法让java正常运行

从dockerfile构建docker镜像,无法让java正常运行

呼唤远方 2021-10-28 16:59:08
我是 docker 和 dockerfile 文件的新手,刚刚开始尝试编写它们。我已经构建了一个简单的 java 控制台应用程序,并且可以从 dockerfile 成功构建一个 docker 映像,但是如果我包含CMD ["java","-jar","app.jar"]当我尝试运行图像时,我总是收到 bin/sh 错误,通常是“找不到 java”或类似错误。但是,当我不包含 CMD 行而仅使用此 Dockerfile 来构建我的映像时FROM openjdk:8-jre-alpineCOPY app.jar /app.jar然后运行docker run -it --rm my-container:tag然后我可以运行java -jar app.jar并且应用程序按预期运行。我也可以跑docker run -it --rm my-container:tag java -jar app.jar并且应用程序按预期运行。我读过的每个指南都说我应该能够使用上面写的 CMD 或 ENTRYPOINT,但没有任何效果。在这个简单的例子中我可能遗漏了什么?谢谢你,特雷弗编辑:我在 MacOS Sierra 上运行 docker 版本 18.06.1-ce-mac73 (26764)。我并不肯定 docker 以这种方式工作,但是我的公共 docker 集线器中有两个图像版本。v1 的 dockerfile 是:FROM openjdk:8-jre-alpineCOPY 454calendar.jar app.jarv2 的 dockerfile 是:FROM openjdk:8-jre-alpineENV PROJECT_DIR=/appWORKDIR $PROJECT_DIRCOPY 454calendar.jar $PROJECT_DIR如果我添加CMD [“java”,”-jar”,”454calendar.jar”]到 v2 dockerfile 并重建,我使用 docker run 命令收到此错误。/bin/sh: [“java”,”-jar”,”454calendar.jar”]: not found没有 CMD 行,我可以运行容器,它直接进入 /app 工作目录,在那里我可以运行 java 命令并执行程序。我的公共 docker 存储库中容器的两个版本在它们各自的 dockerfiles 中没有 CMD 行。
查看完整描述

2 回答

?
阿波罗的战车

TA贡献1862条经验 获得超6个赞

解决方案非常简单。感谢@Rakesh,我在 MacOS 上检查了 TextEdit 的配置,看到 Smart Quotes 已打开。一旦我关闭该选项并重新输入双引号,然后重建并运行 docker 容器,应用程序就会按预期启动。


查看完整回答
反对 回复 2021-10-28
?
交互式爱情

TA贡献1712条经验 获得超3个赞

我认为你的方法没有任何问题。我能够制作一个HelloWorld应用程序来运行下面的Dockerfile.


FROM openjdk:8-jre-alpine

RUN mkdir /app

RUN cd /app

COPY HelloWorld.jar /app/HelloWorld.jar

WORKDIR /app

CMD ["java","-jar", "HelloWorld.jar"]

我使用以下 docker 版本


docker -v

Docker version 18.06.1-ce, build e68fc7a


docker-compose -v

docker-compose version 1.22.0, build f46880f


查看完整回答
反对 回复 2021-10-28
  • 2 回答
  • 0 关注
  • 746 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信