繁体   English   中英

如何在 AWS 上托管的 docker 容器内使用 spring 引导加载 static 文件?

[英]How to load static files with spring boot inside a docker container hosted on AWS?

我的 SpringBoot 应用程序在 docker 容器中运行,该容器由 Dockerfile 构建并托管在 AWS ubuntu 实例上。 一切正常,除了我有一个图像、一个 css 文件和一个无法加载的 js 文件。 检查页面后,这些文件显示 404 not found 错误。 我已经使用 winscp 将我的文件上传到我的 aws 实例。 在 myApp 文件夹中是我的 docker 文件所在的位置以及我构建容器的位置。

目录结构为:

myApp
  -Dockerfile
  -target
     -myApp.jar
  -src
     -main
        -java
            -[all my code in respective subdirectories]
        -resources
            -static
               -my.js
               -my.css
               -my.jpg
            -templates
               -folder1
                    -html
                    -html2
               -folder2
                    -html
                    -html2

我几乎可以肯定我的问题在于 docker 容器和我的 dockerfile。

Spring 引导自动在 /src/main/resources/static 中查找 static 文件。 我在想我的 docker 容器没有这个文件结构。

这是我的 Dockerfile

FROM ubuntu:latest

RUN apt-get update && apt-get install -y openjdk-14-jdk

WORKDIR /usr/local/bin/myApp

ADD . /src/main/resources/static

ADD target/myapp.jar .

ENTRYPOINT ["java", "-jar", "myApp.jar"]

当我构建容器时,它显示成功复制和构建的所有内容,但未访问文件。 对我来说奇怪的是 spring 引导正在提供 static 文件夹中的正确模板。 我对此完全不知所措。 我尝试从 dockerfile 单独添加资源,但仍然没有运气。

您正在设置WORKDIR ,然后使用相对路径将.jar复制到该位置,但是当您复制其他内容( /src/main/resources/static )时,您使用的是完全破坏文件夹结构的绝对路径(因为这些文件不会复制到您的WORKDIR引用的文件夹中)。 你可能已经忘记了. (点)在该路径前面 - ./src/main/resources/static

运行docker exec -it <image-id> bash以访问您正在运行的容器并查看复制的内容,如果您不确定,修复 Z3254677A7917C6C01F55212F86C7 中的内容应该很容易。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM