Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring boot 使用Dockerfile为Spring引导jar指示应用程序属性时,没有这样的文件_Spring Boot_Docker_Docker Compose_Dockerfile - Fatal编程技术网

Spring boot 使用Dockerfile为Spring引导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为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:没有这样的文件或目录:未知

我的结构:

├── 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本身。