我是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 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命令并执行程序。
我的公共docker存储库中的两个版本的容器在各自的dockerfile中都没有CMD行。
答案 0 :(得分:1)
解决方案非常简单。感谢@Rakesh,我在MacOS上检查了TextEdit的配置,发现Smart Quotes已打开。一旦我关闭了该选项并重新输入了双引号,然后重新构建并运行了Docker容器,应用程序就会按预期方式启动。
答案 1 :(得分:0)
我认为您的方法没有任何问题。我能够制作一个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