【问题标题】:Error: Invalid or corrupt jarfile /bin/sh错误:无效或损坏的 jarfile /bin/sh
【发布时间】:2021-11-23 00:33:58
【问题描述】:

我的 Spring Boot 应用有问题。

如果我 docker-compose up,我会看到这个错误 -> 错误:无效或损坏的 jarfile /bin/sh

MongoDb、prometheus 和 grafana 启动正常。

Dockerfile

FROM openjdk:11-jre-slim as build
ADD target/rest-test-0.0.1-SNAPSHOT.jar .
EXPOSE 8000
CMD java -jar rest-test-0.0.1-SNAPSHOT.jar
ENTRYPOINT ["java","-Dspring.profiles.active=prod","-jar"]

docker-compose.yml

version: "3.8"

services:
  rest-test:
    build: .
    restart: always
    ports:
      - "8000:8080"
    depends_on:
      - mongo_db
    environment:
      - "SPRING_PROFILES_ACTIVE=prod"
  mongo_db:
    image: "mongo:latest"
    restart: always
    ports:
      - "27018:27017"
  prometheus:
    image: "prom/prometheus"
    restart: always
    depends_on:
      - rest-test
    ports:
      - "9090:9090"
  grafana:
    image: "grafana/grafana"
    restart: always
    depends_on:
      - rest-test
    ports:
      - "3000:3000"

【问题讨论】:

    标签: java spring-boot docker maven


    【解决方案1】:

    ENTRYPOINT 行不适合此处,您应该将其删除。如果确实需要 JVM 选项,请将它们包含在 java 命令中。

    CMD java -Dspring.profiles.active=prod -jar rest-test-0.0.1-SNAPSHOT.jar
    # no ENTRYPOINT
    

    您会看到原始 Dockerfile 中发生了两件事。由于CMD 是一个裸字符串,Docker automatically wraps it in /bin/sh -c;并且由于您同时拥有ENTRYPOINTCMDthe CMD gets passed as arguments to the ENTRYPOINT。这导致了无意义的命令

    java -D... -jar /bin/sh -c 'java -jar rest-test-0.0.1-SNAPSHOT.jar'
    

    这会产生您看到的错误。

    不要求图像具有ENTRYPOINT;在许多情况下,仅指定 CMD 更易于管理(例如,您可以通过 docker run --rm -it your-image sh 在构建的映像上获取交互式调试 shell)。如果您拆分 CMDENTRYPOINT,则应编写 ENTRYPOINT 以便它接受完整的命令作为参数,或者 ENTRYPOINT 本身应该是完整的命令并且 CMD 是其参数。

    # "Container as command" pattern: lets you
    #   docker run ... the-image -arg1 -arg2
    # where the arguments get passed to the application
    ENTRYPOINT ["java", "-Dspring.profiles.active-prod", "-jar", "rest-test-0.0.1-SNAPSHOT.jar"]
    CMD []
    # empty CMD is optional
    # both must be JSON arrays, you do not want the `sh -c` wrapper
    

    【讨论】:

      猜你喜欢
      • 2016-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-12
      • 2019-12-04
      • 1970-01-01
      • 2017-05-03
      • 1970-01-01
      相关资源
      最近更新 更多