Spring boot 使用Dockerfile为Spring引导jar指示应用程序属性时,没有这样的文件
我正在使用Docker Compose为Spring引导应用程序创建一个容器 我在执行docker撰写时收到以下错误: 正在重新创建后端\u springboot。。。错误 错误:对于后端\u,springboot无法启动服务:OCI 运行时创建失败:容器\u linux。转到:346:启动容器 进程导致exec:\sh-c java -Dspring.config.location=/application.properties-Djava.security.egd=文件:/dev//uradom$JAVA\u OPTS-jar/app.jar \:stat sh-c JAVA-Dspring.config.location=/application.properties -Djava.security.egd=file:/dev//uradom$JAVA_OPTS-jar/app.jar:没有这样的文件或目录:未知 错误:for服务无法启动服务:OCI运行时创建 失败:容器\u linux。转到:346:启动容器进程导致 exec:\sh-cjava-Dspring.config.location=/application.properties -Djava.security.egd=file:/dev//uradom$JAVA\u OPTS-jar/app.jar \:stat sh-c JAVA-Dspring.config.location=/application.properties -Djava.security.egd=file:/dev//uradom$JAVA_OPTS-jar/app.jar:没有这样的文件或目录:未知 我的结构:Spring boot 使用Dockerfile为Spring引导jar指示应用程序属性时,没有这样的文件,spring-boot,docker,docker-compose,dockerfile,Spring Boot,Docker,Docker Compose,Dockerfile,我正在使用Docker Compose为Spring引导应用程序创建一个容器 我在执行docker撰写时收到以下错误: 正在重新创建后端\u springboot。。。错误 错误:对于后端\u,springboot无法启动服务:OCI 运行时创建失败:容器\u linux。转到:346:启动容器 进程导致exec:\sh-c java -Dspring.config.location=/application.properties-Djava.security.egd=文件:/dev//urad
├── docker-compose.yml
├── spring-boot
│ ├── Dockerfile
│ ├── application.properties
│ └── backofficeservices-0.0.1.jar
docker-compose.yml
version: '3'
services:
service:
container_name: backend_springboot
build: ./spring-boot
ports:
- "80:8080"
restart: always
spring启动/Dockerfile
FROM openjdk:8-jre-alpine as gradle
COPY backofficeservices-0.0.1.jar /app.jar
COPY application.properties /application.properties
ENV JAVA_OPTS=""
ENTRYPOINT ["sh -c java -Dspring.config.location=/application.properties -Djava.security.egd=file:/dev/./urandom $JAVA_OPTS -jar /app.jar"]
EXPOSE 8080
据我所知,没有找到application.properties。如果有人能帮我发现错误,我将不胜感激
我的目标是应用我的application.properties运行我的Spring Boot应用程序。您已经用一个单词指定了一个入口点。当您启动容器时,它试图将其作为一个单词运行——它正在寻找一个名为sh-cjava…,带有空格和all的二进制文件名。如果您的命令有多个单词,并且您使用的是JSON数组形式,那么您必须自己正确地手动将其拆分为多个单词
ENTRYPOINT ["sh", "-c", "java -Dspring.config.location=..."]
Dockerfile CMD和ENTRYPOINT非常相似;两者都提供了容器最终运行的部分命令。如果您只需要其中一个,我建议使用CMD,原因有两个:它可以更容易地在构建的映像docker run-rm-it myimage/bin/sh上获得调试shell,并且有一种相当标准的模式,即使用入口点脚本进行一些初始设置,然后使用exec$@运行CMD
CMD ["sh", "-c", "java -Dspring.config.location=..."]
如果你有这个表格,Docker可以提供sh-c。。。给你的包装纸
CMD java -Dspring.config.location=...
再进行一点清理,最后的Dockerfile就会像
来自openjdk:8-jre-alpine
复制backofficeservices-0.0.1.jar/app.jar
复制application.properties/application.properties
环境JAVA_选项=
CMD java\
-Dspring.config.location=/application.properties\
-Djava.security.egd=文件:/dev//uradom\
$JAVA_选项\
-jar/app.jar
曝光8080
你确定你把它说找不到的文件挂载到docker容器了吗?@bturner1273是的,我添加了一条将文件application.properties从我的机器复制到容器的指令,这是spring boot/Dockerfile的第二条指令。嗯。。。在错误消息中,application.properties拼写为aplication.properties。可能是你在某个地方打错了,而docker正在寻找错误的文件吗?@bturner1273很好。我修复了名称,但仍然收到相同的错误。嗯,请尝试装载到正在运行的容器和CD,然后四处查看您的文件是否在expectedIt运行时复制,非常感谢我的朋友。我不知道你说的所有把戏。只有一个问题,如何将ENV JAVA_OPTS=添加到CMD中?我只需要在-jar之前添加它。。。。线路?是的;我把它添加到我的答案中。我的印象是JVM自己处理它,但不是JVM本身。