我是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
解决方案简单得令人恼火。感谢@Rakesh,我在MacOS上检查了TextEdit的配置,发现智能报价已经打开。一旦我关闭了这个选项,重新输入双引号,然后重建并运行docker容器,应用程序就像预期的那样启动了。
问题内容: 我尝试在构建映像的同时使用Docker安装软件,然后得到了。 我使用的Dockerfile 有没有一种方法可以在Dockerfile中运行docker命令来创建映像? 问题答案: 您的问题不在于Docker命令,因为它在错误消息中表示您的Docker守护程序未运行,或者由于某些配置问题而无法连接到它。 您刚刚安装了Docker吗?您是否完成了《安装指南》中的所有步骤? 您可以使用或来测
我正在使用包含所有maven配置、密钥、maven命令和所有内容的sh文件,我想从Dockerfile内部执行这个sh文件,以便在运行容器时执行sh文件。 这是我的Docker文件的外观: DockerTest。sh文件如下所示。 当我创建docker图像并运行该图像时,它显示了这个错误。我试过很多东西,但仍然不起作用,这表明了这个错误 尚未为此生成指定目标。您必须以以下格式指定有效的生命周期阶段
我有一个简单的Jenkins管道,它创建了一个包含3个容器的pod——jnlp、dind和示例测试 如下所示- 还定义了几个阶段- 现在我的根文件夹中有了这个脚本“示例”,我想运行它,但不知怎么的,它找不到。 Dockerfile看起来像这样- pwd返回“/home/jenkins/agent/workspace/test pipeline”,而不是docker容器路径。 结果如下- 你知道怎么
目前,我发现谷歌云构建发生在构建docker图像的时候(不像我想象的那样,它会构建我的图像,然后执行我的图像来完成所有的构建)。那是在这篇文章里 谷歌云构建的快速启动 我有一个Dockerfile现在很简单 我有一个单一的下载和提取下载任何工件(zip文件)从最后的单构建运行构建(只有修改的服务器被构建或依赖于上一个CI构建的变化的服务器被构建,就像下游库可能被更改)。第一行只是列出了我需要在一个
问题内容: 我从dockerfile构建了Docker映像。我看到映像已成功构建,但是该如何处理?它不应该能够作为容器运行吗? 问题答案: 运行它的具体方法取决于您是否为图像指定了标签/名称。 使用名称(让我们使用 Ubuntu ): 没有名称,只需使用ID: 请参阅 Docker运行参考 以获取更多信息。
问题内容: 我使用Java创建了一个Docker映像,并将jar文件复制到该映像中。我的Dockerfile是: 执行以下命令后: 在控制台中,我看到了应用程序的输出,一切都很好。但是当我停止图像时,我不知道如何再次运行图像?当我执行以下命令时: 该应用程序再次运行,但是在我的Dockerfile中,我已经编写了此命令。如何在不使用此命令的情况下运行映像并使应用程序自动运行? 问题答案: 图像和容