【问题标题】:Building a docker image from dockerfile, can't get java to run correctly, but can run java from image as command line parameters in docker run command从 dockerfile 构建 docker 映像,无法让 java 正确运行,但可以从映像运行 java 作为 docker run 命令中的命令行参数
【发布时间】:2018-10-05 23:42:12
【问题描述】:

我是 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 行。

【问题讨论】:

  • 你运行的是什么版本的 docker?
  • 我用你的图片试过了,没有出现错误。所以你最好添加你得到的具体错误信息,这似乎是最重要的部分。
  • 能否请您附上您的Dockerfile?对我来说,这似乎是缺少 WORKDIR 配置。

标签: java docker dockerfile


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 我的配置肯定有问题什么的。我编写了完全相同的 dockerfile(仅更改 .jar 文件名),每次尝试运行容器时都会得到这个:/bin/sh: [“java”,”-jar”,”454calendar.jar”] : 没找到
    • @Trevor 你确定你的案卷文件上有正确的双码符号吗?
    • @Rakesh:你知道,TextEdit 中的双引号看起来很有趣;我将尝试使用不同的文本编辑器。我的确切运行命令是: docker run -it --rm tdawg206/454calendar:v2
    • @Rakesh:引号是问题所在。 MacOS TextEdit 应用程序启用了智能引号,因此它们不断变化。一旦我关闭它并重新输入双引号,然后重建并运行容器,它就完全按预期工作了!感谢您触发我进行检查。
    • FROM openjdk:8-jre-alpine WORKDIR /app COPY HelloWorld.jar HelloWorld.jar CMD ["java","-jar", "HelloWorld.jar"]
    猜你喜欢
    • 2017-11-12
    • 1970-01-01
    • 2017-10-18
    • 1970-01-01
    • 1970-01-01
    • 2019-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多