【发布时间】:2021-01-24 20:57:25
【问题描述】:
我想知道这篇文章的标题是否不应该是“我无知”。这显然是一个常见问题,我已经阅读了多个主题,但在某个地方我缺少知识或……某些东西。
- /questions/24661289/spring-boot-not-serving-static-content
- /questions/54735747/spring-boot-not-serving-static-files-from-inside-jar
- /questions/63061943/how-to-load-static-files-with-spring-boot-inside-a-docker-container-hosted-on-aw
我已经确认我的问题是静态资源没有进入 Docker。使用 CLI,我可以在那里解压缩 jar,并看到那里没有 html、js 或 css 文件。
但是,我已经确认我正在使用的罐子(我想我正在使用它,无论如何。我不知道它怎么不可能。)确实有它们。就好像它们以某种方式被故意提取和排除。
这是我的 application.properties:
#FOR LOCAL
#spring.datasource.url=jdbc:postgresql://localhost:5432/library
#FOR DOCKER
spring.datasource.url=jdbc:postgresql://postgresqldb:5432/library
spring.datasource.username=postgres
spring.datasource.password=password
spring.datasource.driver-class-name=org.postgresql.Driver
#The SQL dialect makes Hibernate generate better SQL for the chosen database
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect
#Hibernate ddl auto (create, create-drop, validate, update)
spring.jpa.hibernate.ddl-auto=create
spring.datasource.initialization-mode=always
#This enables app to serve the static content. Not sure why I need it, but it makes it work locally.
server.contextPath=/
这是我的 Dockerfile
FROM openjdk:8-jdk-alpine
ARG JAR_FILE=build/libs/microservice1-0.0.1-SNAPSHOT.jar
COPY ${JAR_FILE} bookws.jar
ENTRYPOINT ["java","-jar","/bookws.jar"]
这是我的 docker-compose.yaml
version: '3.1'
services:
app:
container_name: bookws
image: bookws
build: ./
ports:
- "8080:8080"
depends_on:
- postgresqldb
postgresqldb:
image: postgres
ports:
- "5432:5432"
environment:
- POSTGRES_PASSWORD=password
- POSTGRES_USER=postgres
- POSTGRES_DB=library
这是我的主要 java 文件:
//package and imports excluded for brevity
@SpringBootApplication
public class Microservice1Application {
public static void main(String[] args) {
SpringApplication.run(Microservice1Application.class, args);
}
}
我的静态资源存放在 src/main/resources/static
static/index.html
static/js/book-crud.js
static/js/jquery-3.5.0.min.js
static/js/jquery-ui-1.12.1.min.js
static/css/main.css
static/img/ (some .pngs and some .jpgs)
编辑:添加我的 build.gradle 文件:
plugins {
id 'org.springframework.boot' version '2.3.3.RELEASE'
id 'io.spring.dependency-management' version '1.0.10.RELEASE'
id 'java'
}
group = 'com.familam.learning'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'
configurations {
compileOnly {
extendsFrom annotationProcessor
}
}
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-actuator'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-hateoas'
implementation 'org.springframework.boot:spring-boot-starter-web'
compileOnly 'org.projectlombok:lombok'
runtimeOnly 'org.postgresql:postgresql'
annotationProcessor 'org.projectlombok:lombok'
// annotationProcessor 'org.springframework.boot:spring-boot-configuration-processor'
testImplementation('org.springframework.boot:spring-boot-starter-test') {
exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
}
}
test {
useJUnitPlatform()
}
提前感谢您的任何见解!如果我需要添加任何进一步的信息,我很乐意。我缺少的可能很简单的事情是什么?
【问题讨论】:
-
如果我只是无知,请原谅我。为什么你在谈论两个不同的jar文件?为什么不能将你知道的所有正确内容的 jar 文件部署到 Docker?是什么让 Docker 版本与众不同,为什么?
-
我会考虑查看 Jib 或 Spring 的 Docker 支持,而不是使用硬编码的 JAR 版本维护自己的 Dockerfile。否则,请出示您的 Maven/Gradle 构建脚本
-
@Steve 我想你的问题正是我想知道的——为什么它们不同。我认为我正在将它直接部署到 Docker 中。我很困惑为什么当我单独解压缩它们(使用 CLI 访问 Docker 中的那个)时,它们是不同的。
-
@OneCricketeer Gradle 脚本已添加,谢谢!我现在开始研究 Jib 和 Spring 的 Docker 支持。谢谢!
-
嗯,似乎我所做的任何改变都没有什么不同。是否有可能每次都重复使用相同的图像,而不是使用重新构建的 jar 并创建新图像?也许我错过了一个命令。我输入的只是:'docker-compose up',ctr-c 杀死它,然后'docker-compose down' 删除它。我应该在那里做其他事情来创建新图像吗?
标签: java spring-boot docker static-files