我有一个基于spring-boot的java应用程序,可以从命令行运行(嵌入式tomcat独立)。
问题
当我在docker中运行应用程序时,它无法正常运行。控制台显示应用程序启动正常,没有错误;但是,浏览器显示以下错误页面:
Whitelabel错误页面
这个应用程序没有/ error的显式映射,所以你看到了 这是一个后备。
[我理解该消息说没有'/ error'网址的映射。但是我想知道根本原因]
其他信息/背景
build.gradle target
task buildDocker(type: Docker, dependsOn: build) {
push = false
applicationName = jar.baseName
dockerfile = file('src/main/docker/Dockerfile')
doFirst {
copy {
from war
into stageDir
}
}
}
dockerfile
FROM frolvlad/alpine-oraclejdk8:slim
VOLUME /tmp
ADD floss.war app.jar
RUN sh -c 'touch /app.jar'
ENV JAVA_OPTS=""
ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar" ]
运行Docker的命令
dockerImg=1248c47d9cfa
docker run \
-it \
--net=host \
-e SPRING_APPLICATION_JSON="$SPRING_APPLICATION_JSON" \
$dockerImg
我是码头工的新手,非常感谢任何建议。
提前感谢!
答案 0 :(得分:3)
问题:
溶胶:
1.在dockerfile中公开应用程序端口并构建映像
EXPOSE $application_port
然后跑
docker run -p 8080:8080 -d -e SPRING_APPLICATION_JSON="$SPRING_APPLICATION_JSON" $dockerImg
答案 1 :(得分:2)
我有同样的问题。你似乎和我一样使用与Spring Boot相同的Docker示例。如您所见,WAR文件在放入Docker镜像时会获得.jar扩展名,而不是.war。
我能够通过调用文件" app.war"来解决问题。而不是" app.jar"并相应地更改Java启动参数。
如果使用扩展名" .jar",对静态资源的访问可以正常工作,但访问所有动态内容(JSP,...)会导致404错误。
答案 2 :(得分:1)
我怀疑这是由于缺少-p选项,你能试试吗?如果端口不同,请更改端口。 docker run -p 8080:8080 - \ --net =主机\ -e SPRING_APPLICATION_JSON =" $ SPRING_APPLICATION_JSON" \ $ dockerImg