春季启动应用程序运行良好的独立,错误docker工人
我有一个基于spring-boot的java应用程序,可以从命令行(embedded式tomcat standalone)正常运行。
问题
当我在docker中运行应用程序时,它不能正常运行。 控制台显示应用程序启动正常,没有错误; 但是,浏览器显示以下错误页面:
白标签错误页面
此应用程序没有明确的映射/错误,所以你看到这是一个后备。
[我明白这个消息说没有映射'/错误'url。 但是我想知道根本原因]
附加信息/上下文
- 春季启动1.4.2
- docker插件
- 输出是也是独立运行的“战争”文件
- 我运行“主机”networking模式(–net =主机)的docker图像,以便它可以访问数据库(我的本地主机上运行的MySQL)
build.gradle目标
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
我是新来的docker,并会很感激任何build议。
提前致谢!
问题:
- 在dockerfile中没有暴露的端口
- 没有与主机的端口映射。
Sol:1.在dockerfile中显示应用程序端口并构build镜像EXPOSE $application_port
2.然后运行EXPOSE $application_port
docker run -p 8080:8080 -d -e SPRING_APPLICATION_JSON="$SPRING_APPLICATION_JSON" $dockerImg
我怀疑这是由于缺less-p选项,你可以试试这个。 如果不同,请更改端口。 docker run -p 8080:8080 -it \ –net = host \ -e SPRING_APPLICATION_JSON =“$ SPRING_APPLICATION_JSON”\ $ dockerImg
我遇到过同样的问题。 你似乎是像我一样使用Spring Boot的同一个Docker示例。 正如你所看到的,当WAR文件被放到Docker映像中时WAR文件得到一个.jar扩展名,而不是.war。
我能够通过调用文件“app.war”而不是“app.jar”并相应地更改Java启动参数来解决问题。
如果使用扩展名“.jar”,对静态资源的访问正常,但访问所有dynamic内容(JSP,…)将导致404错误。