当前位置: 首页 > 知识库问答 >
问题:

使用Dockerfile指示Spring Bootjar的应用程序属性时没有此类文件

司马奇希
2023-03-14

错误:for service无法启动服务service:OCI运行时创建失败:CONTAINER_Linux.GO:346:启动容器进程导致“exec:\”sh-c java-dspring.config.location=/application.properties-djava.security.egd=file:/dev/./urandom$java_opts-jar/app.jar\“:stat sh-c java-dspring.config.location=/application.properties-djava.security.egd=file:/dev/./urandom$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-boot/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

共有1个答案

龚远
2023-03-14

您已经使用单个“word”指定了一个入口点。当您启动容器时,它试图将其作为一个“单词”运行--它正在查找一个名为sh-c java...的二进制文件,文件名中包含空格和所有空格。如果您的命令有多个“单词”,并且您使用的是JSON-array表单,那么您必须自己手动正确地将其拆分为单词。

ENTRYPOINT ["sh", "-c", "java -Dspring.config.location=..."]

Dockerfile CMD和ENTRYPOINT非常相似;两者都提供容器最终运行的命令的一部分。如果您只需要其中一个,我建议您改用CMD,原因有两个:它使得在构建的映像Docker运行--rm-it myimage/bin/sh上获得调试shell更加容易,还有一种相当标准的模式,即使用入口点脚本进行一些初始设置,然后使用exec“$@”运行CMD。

CMD ["sh", "-c", "java -Dspring.config.location=..."]

如果您有此表单,Docker可以为您提供sh-c...包装器。

CMD java -Dspring.config.location=...
FROM openjdk:8-jre-alpine
COPY backofficeservices-0.0.1.jar /app.jar
COPY application.properties /application.properties
ENV JAVA_OPTS=""
CMD java \
      -Dspring.config.location=/application.properties \
      -Djava.security.egd=file:/dev/./urandom \
      $JAVA_OPTS \
      -jar /app.jar
EXPOSE 8080
 类似资料:
  • 当我试图创建一个帖子时,它会显示这个错误 而我的 view.py 是 追溯: 文件"/home/zola/lib/python3.5/site-pack/django/core/handler/exception.py"在内部39.响应=get_response(请求) 文件“/home/zola/lib/python3.5/site-packages/django/core/handlers/b

  • 我在src/main/resources下创建了2个文件: 应用程序。属性 第一个具有从env变量中获取值的属性,而后者具有固定值。 根据这里的具体情况,我以这样的方式推出了Spring靴: 然而,不会产生任何影响,并且应用程序是局部的。属性似乎被忽略。 有什么提示吗?

  • 我正在学习Spring boot application,并且有使用xml和java配置的Spring应用程序的经验。 我使用的应用程序具有包含UI、服务和DAO的代码基体系结构。所有这些组件都有单独的上下文文件,即。web-applicationcontext.xml或application-servlet-context.xml、service-context.xml和data-context

  • 问题内容: 我们正在升级到Jenkins(2.60.1)的新版本,并且在以前的Jenkins版本(1.596 / 2)中运行的groovy脚本不再起作用。 这是一个Jenkins构建项目,已参数化,我们正在使用Groovy脚本为Choice Provider提供选择(Choice Provider设置为System Groovy Choice Parameter)。 我们正在尝试访问Jenkins

  • 我正在尝试关闭本地mysql数据库的ssl。但我无法在spring应用程序中找到实际属性。属性文件,该文件将执行此操作。 我当前的文件是: 我试过Spring。数据源。useSSl=false,这不起作用。我也尝试过spring。数据源。url=jdbc:mysql://localhost:3306/test

  • 我有一个Spring Boot应用程序,代码需要访问resources文件夹下的一个文件。这是我的申请表。属性文件: 然而,它总是抱怨: 我仔细检查了文件夹my_project/target/classes,以确保文件cert.p12存在。 在代码中,我试图访问该文件: 这个类路径到底是什么?为什么它找不到文件?谢谢