我在包含 Web 应用程序的目录的根目录下创建了一个 Dockerfile。我的 Dockerfile 内容如下:
FROM openjdk:8u282-jre
MAINTAINER me <me@email.com>
COPY target/spring-petclinic-2.2.0.BUILD-SNAPSHOT.jar /
EXPOSE 8080
ENTRYPOINT ["java -jar"]
我正在尝试使用项目目录根目录中的路径从我的本地机器复制 jar 文件 - 将其复制到容器的根目录,公开端口 8080,并使用一个入口点,认为在构建映像后,jar 将使用此入口点作为可执行文件运行。然后我按如下方式构建图像:
docker build -t se441/spring-petclinic:standalone .
将构建命名为 se441/spring-petclinic:standalone,然后我尝试运行容器:
docker run -i -t se441/spring-petclinic:standalone
我收到以下错误:
docker: Error response from daemon: OCI runtime create failed: container_linux.go:370:
starting container process caused: exec: "java -jar": executable file not found in $PATH:
unknown.
我编辑了 Dockerfile 使入口点是 /bin/bash,做了一个 'ls' 并且 jar 文件肯定在那里。在容器中,我可以成功运行 jar。关于为什么在使用上面列出的 Dockerfile 构建/运行时找不到 jar 文件的任何建议。将不胜感激。谢谢。
答案 0 :(得分:1)
变化:
ENTRYPOINT ["java -jar"]
到:
ENTRYPOINT ["java", "-jar"]
exec 语法(使用 json 数组)不做任何命令行解析,你用 shell 得到,所以它寻找文字二进制 java -jar
而不是 java
并传递 {{ 1}} 论点。您需要将每个参数作为另一个数组条目进行分隔,就像在命令行中用空格分隔它们一样。
此时,您会发现 -jar
需要 jar 文件的名称。您可以在运行容器时将其作为参数传递,例如:
-jar
或者在入口点也指定:
docker run -i -t se441/spring-petclinic:standalone spring-petclinic-2.2.0.BUILD-SNAPSHOT.jar