Docker无法找到OpenJDK。

3
我第一次尝试使用Docker,并试图在Docker容器中运行Spring Boot Web应用程序。我正在构建该应用程序(它会打包成一个自包含的jar文件),然后将其添加到Docker映像中(这正是我想要的)。
我遵循这里 OpenJDK Docker基础映像 的说明。您可以在此 Bootup repo on GitHub 找到我的 SSCCE,其中README有所有重现我所看到的内容的说明。但基本上:
- 我将Web应用程序构建为jar文件 - 运行 docker build -t bootup . 成功 - 运行 docker run -it --rm --name bootup bootup ,然后给我以下错误并退出:
错误信息:
/bin/sh: 1: /bin/sh: [java,: not found

根据Google Gods,这曾经是Oracle JDK镜像的问题,但不应该发生在OpenJDK镜像中。
查看我的Dockerfile(也在GitHub存储库中),有人能看出我哪里出错了吗?
FROM openjdk:8
RUN mkdir /opt/bootup
ADD build/libs/bootup.jar /opt/bootup
WORKDIR /opt/bootup
ENTRYPOINT ['java', '-jar', 'bootup.jar']
CMD ['']

提前致谢!


更新:

docker ps的输出:

CONTAINER ID        IMAGE               COMMAND                  CREATED
16bde964ff6b        bootup              "/bin/sh -c 'java -ja"   2 days ago

STATUS              PORTS                    NAMES
Up 14 seconds       0.0.0.0:8080->8080/tcp   bootup
1个回答

3

我使用以下dockerfile可以正常运行:

FROM openjdk:8

RUN mkdir /opt/bootup

ADD build/libs/bootup.jar /opt/bootup
WORKDIR /opt/bootup
EXPOSE 8080
ENTRYPOINT java -jar bootup.jar

使用这个命令它可以正常运行:

docker run -it -p 8080:8080 --name bootup bootup

我不是Java开发人员,也不知道为什么它会忽略您的配置要求在端口9200上启动,因为您的应用程序在端口8080上启动,但从Docker的角度来看,我的配置一切正常,我可以从浏览器上的localhost:8080连接到应用程序。
这里是截图: Screenshot 另外,既然您发布了您的GitHub存储库,我建议您修改自述文件,以便用户可以通过以下一次性命令在Docker中启动Gradle,而无需在运行此命令的主机机器上拥有Java环境:
docker run --rm -v "$PWD":/usr/src/myapp -w /usr/src/myapp openjdk:8 /usr/src/myapp/gradlew clean build

1
你能否执行以下Docker命令:docker run -it -d --rm --name bootup bootup,然后再执行docker exec -it bootup /bin/bash - Mano Marks
1
尝试运行以下命令:docker run -it -d --name bootup bootup - Mano Marks
1
哦,抱歉我以为你只需要访问日志。看起来你需要的是使日志不要进入主机终端,第一个作为守护进程运行的命令已经实现了这一点。对于第三个问题,你需要在运行时使用 -p 9200:9200 暴露一个端口。假设你正在使用 Docker for Mac 或 Docker for Windows,那么这应该可以让你访问 localhost:9200。 - Mano Marks
1
@smeeb,你能发布一下docker ps的输出吗? - TopperH
1
@smeeb,我的新配置现在可以工作了,但是你的配置让应用程序在9200端口上运行被忽略了,而选择了8080端口。我不是Java开发人员,所以不知道出了什么问题。Docker方面现在完美地工作了。 - TopperH
显示剩余13条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接