我第一次尝试使用Docker,并且试图让Spring Boot Web应用程序在Docker容器中运行.我正在构建应用程序(将其打包到一个独立的jar中),然后将其添加到Docker映像(这就是我想要的).
我在这里遵循OpenJDK Docker base image的指示.您可以在Bootup repo on GitHub上找到我的SSCCE,其自述文件中包含了重现我所看到内容的所有说明.但基本上:
>我将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
最佳答案
我使用此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的角度来看,一切都在使用我的配置,并且我可以连接从我的浏览器在本地主机上访问应用程序:8080
另外,由于您已经发布了github存储库,因此我建议您修改自述文件,以便用户可以从docker启动gradle,而无需在运行此命令的主机中使用Java环境:
docker run --rm -v "$PWD":/usr/src/myapp -w /usr/src/myapp openjdk:8 /usr/src/myapp/gradlew clean build