从dockerfile、can';无法让java正确运行,但可以在docker run命令中将java作为命令行参数从映像运行

从dockerfile、can';无法让java正确运行,但可以在docker run命令中将java作为命令行参数从映像运行,java,docker,dockerfile,Java,Docker,Dockerfile,我是docker和dockerfile文件的新手,刚刚开始尝试编写它们。我已经构建了一个简单的java控制台应用程序,可以成功地从dockerfile构建docker映像,但是如果我包括 CMD ["java","-jar","app.jar"] 当我尝试运行映像时,总是会出现bin/sh错误,通常是“java未找到”之类的错误 但是,当我不包含CMD行时,只需使用此Dockerfile来构建我的映像 FROM openjdk:8-jre-alpine COPY app.jar /app.ja

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

CMD ["java","-jar","app.jar"]
当我尝试运行映像时,总是会出现bin/sh错误,通常是“java未找到”之类的错误

但是,当我不包含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是这样工作的,但我的公共docker中心有两个图像版本。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和rebuild,我使用dockerrun命令得到这个错误

/bin/sh: [“java”,”-jar”,”454calendar.jar”]: not found
没有CMD行,我可以运行container,它直接启动到/app工作目录,在那里我可以运行java命令并执行程序


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

我认为您的方法没有任何问题。我能够制作一个
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

我看你的方法没有任何问题。我能够制作一个
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


解决办法简单得令人发狂。多亏了,我检查了MacOS上TextEdit的配置,发现Smart Quotes已打开。一旦我关闭该选项并重新键入双引号,然后重新构建并运行docker容器,应用程序就会像预期的那样启动。

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

您正在运行哪个版本的docker?我已尝试使用您的图像,但没有出现错误。因此,您最好添加您收到的特定错误消息,它似乎是最重要的部分。您能包括您的
Dockerfile
吗?对我来说,似乎缺少
WORKDIR
配置。您正在运行哪个版本的docker?我已尝试使用您的图像,没有出现错误。因此,您最好添加您收到的特定错误消息,它似乎是最重要的部分。您能包括您的
Dockerfile
吗?对我来说,这似乎是缺少的
WORKDIR
配置。我的配置肯定有问题。我编写了完全相同的dockerfile(仅更改.jar文件名),每次尝试运行容器时都会得到这个文件:/bin/sh:[“java”、“-jar”、“454calendar.jar”]:notfound@Trevor你确定你的卷宗文件上有正确的双引号吗?@Rakesh:你知道,TextEdit中的双引号看起来确实很有趣;我要尝试一个不同的文本编辑器。我确切的run命令是:docker run-it--rm tdawg206/454calendar:v2@Rakesh:引号是问题所在。MacOS TextEdit应用程序启用了智能引号,所以它们一直在更改。一旦我关闭它并重新输入双引号,然后重新构建并运行容器,它就完全按照预期工作了!感谢您触发我进行检查。从openjdk:8-jre-alpine WORKDIR/app COPY HelloWorld.jar HelloWorld.jar CMD[“java”、“-jar”、“HelloWorld.jar”]我的配置肯定有问题。我编写了完全相同的dockerfile(仅更改.jar文件名),每次尝试运行容器时都会得到这个文件:/bin/sh:[“java”、“-jar”、“454calendar.jar”]:notfound@Trevor你确定你的卷宗文件上有正确的双引号吗?@Rakesh:你知道,TextEdit中的双引号看起来确实很有趣;我要尝试一个不同的文本编辑器。我确切的run命令是:docker run-it--rm tdawg206/454calendar:v2@Rakesh:引号是问题所在。MacOS TextEdit应用程序启用了智能引号,所以它们一直在更改。一旦我关闭它并重新输入双引号,然后重新构建并运行容器,它就完全按照预期工作了!谢谢你触发我来检查。从openjdk:8-jre-alpine WORKDIR/app COPY HelloWorld.jar HelloWorld.jar CMD[“java”、“-jar”、“HelloWorld.jar”]