gpt4 book ai didi

java - 从dockerfile构建docker镜像,无法让java正确运行,但可以从镜像运行java作为docker run命令中的命令行参数

转载 作者:行者123 更新时间:2023-12-02 10:44:40 30 4
gpt4 key购买 nike

我是 docker 和 dockerfile 文件的新手,刚刚开始尝试编写它们。我已经构建了一个简单的 java 控制台应用程序,并且可以从 dockerfile 成功构建 docker 镜像,但是如果我包含

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

当我尝试运行图像时,我总是收到 bin/sh 错误,通常是“java not found”或类似错误。

但是,当我不包含 CMD 行并仅使用此 Dockerfile 来构建我的镜像时

FROM openjdk:8-jre-alpine
COPY 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 是否以这种方式工作,但我的公共(public) docker hub 中有两个镜像版本。 v1 的 dockerfile 是:

FROM openjdk:8-jre-alpine
COPY 454calendar.jar app.jar

v2 的 dockerfile 是:

FROM openjdk:8-jre-alpine
ENV PROJECT_DIR=/app
WORKDIR $PROJECT_DIR
COPY 454calendar.jar $PROJECT_DIR

如果我添加

CMD [“java”,”-jar”,”454calendar.jar”]

到 v2 dockerfile 并重建,我使用 docker run 命令收到此错误。

/bin/sh: [“java”,”-jar”,”454calendar.jar”]: not found

没有 CMD 行,我可以运行容器,它会直接启动到/app 工作目录,我可以在其中运行 java 命令并执行程序。

我的公共(public) docker 存储库中容器的两个版本在各自的 dockerfiles 中没有 CMD 行。

最佳答案

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

关于java - 从dockerfile构建docker镜像,无法让java正确运行,但可以从镜像运行java作为docker run命令中的命令行参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52674467/

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