【发布时间】: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