Spring启动应用程序运行良好的独立,错误的码头工具

时间:2017-01-10 22:10:22

标签: docker spring-boot

我有一个基于spring-boot的java应用程序,可以从命令行运行(嵌入式tomcat独立)。

问题

当我在docker中运行应用程序时,它无法正常运行。控制台显示应用程序启动正常,没有错误;但是,浏览器显示以下错误页面:

  

Whitelabel错误页面

     

这个应用程序没有/ error的显式映射,所以你看到了   这是一个后备。

[我理解该消息说没有'/ error'网址的映射。但是我想知道根本原因]

其他信息/背景

  • Spring boot 1.4.2
  • docker plugin
  • 输出为'war'文件,该文件也独立运行
  • 我在“主机”网络模式(--net = host)中运行docker镜像,因此它可以访问数据库(在我的localhost上运行的mysql)

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

我是码头工的新手,非常感谢任何建议。

提前感谢!

3 个答案:

答案 0 :(得分:3)

问题:

  1. dockerfile中没有公开的端口
  2. 没有与主机进行端口映射。
  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