docker上的Spring引导无法从资源中读取属性文件,但可以在没有docker的情况下使用java-jar



我的Spring启动应用程序有一个带有AWS凭据的属性文件,当我运行gradle bootJar时,构建了具有所有依赖项的胖jar,我可以使用java-jar 运行它

但当我捆绑构建Docker镜像时,我得到的是以下错误,基本上是抱怨它在资源下的属性文件中找不到AWS凭据

2021-03-23 17:51:01.542 ERROR 1 --- [nio-8080-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is com.amazonaws.SdkClientException: Unable to load AWS credentials from any provider in the chain: [EnvironmentVariableCredentialsProvider: Unable to load AWS credentials from environment variables (AWS_ACCESS_KEY_ID (or AWS_ACCESS_KEY) and AWS_SECRET_KEY (or AWS_SECRET_ACCESS_KEY)), SystemPropertiesCredentialsProvider: Unable to load AWS credentials from Java system properties (aws.accessKeyId and aws.secretKey), WebIdentityTokenCredentialsProvider: To use assume role profiles the aws-java-sdk-sts module must be on the class path., com.amazonaws.auth.profile.ProfileCredentialsProvider@61a02480: profile file cannot be null, com.amazonaws.auth.EC2ContainerCredentialsProviderWrapper@23b9c9f8: Failed to connect to service endpoint: ]] with root cause

再次注意,我可以使用具有相同凭据属性文件的java-jar运行组装好的胖jar,而不会出现任何问题。

这是我的Dockerfile

FROM openjdk:8-jdk-alpine
VOLUME /tmp
ARG DEPENDENCY=target/dependency
COPY ${DEPENDENCY}/BOOT-INF/lib /app/lib
COPY ${DEPENDENCY}/META-INF /app/META-INF
COPY ${DEPENDENCY}/BOOT-INF/classes /app
ENTRYPOINT ["java","-cp","app:app/lib/*","com.myapp.myapp"]

这些是build.gradle中的docker任务(当然是在导入palantir之后(来构建图像

apply plugin: 'com.palantir.docker'
group = 'com.myapp'
bootJar {
baseName = 'mayapp'
version =  '0.1.0'
}
task unpack(type: Copy) {
dependsOn bootJar
from(zipTree(tasks.bootJar.outputs.files.singleFile))
into("build/dependency")
}
docker {
name "${project.group}/${bootJar.baseName}"
copySpec.from(tasks.unpack.outputs).into("dependency")
buildArgs(['DEPENDENCY': "dependency"])
}

这就是我运行容器的方式

docker run -p 8080:8080 com.myapp/myapp

应为ENTRYPOINT ["java","-cp","/app:/app/lib/*","com.myapp.myapp"]不确定如何使用app:app/lib/*找到类路径

相关内容

最新更新