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

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

我在 docker 容器中获得了 Spring 启动应用程序 运行,该容器由 Dockerfile 构建并托管在 AWS ubuntu 实例上。 一切正常,除了我有一张图片、一个 css 文件和一个无法加载的 js 文件。检查页面后,这些文件显示 404 未找到错误。 我已经使用 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 容器和我的 docker 文件上。

Spring 开机自动查找 /src/main/resources/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 boot 正在为静态文件夹中的正确模板提供服务。我对此完全不知所措。我已经尝试从 docker 文件中单独添加资源,但仍然没有成功。

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

运行 docker exec -it <image-id> bash 以访问您的 运行 容器并查看复制的内容如果您不确定,从那时起修复 Dockerfile 中的内容应该很容易.