【问题标题】:Dockerfile - using ARG in ENTRYPOINT not workingDockerfile - 在 ENTRYPOINT 中使用 ARG 不起作用
【发布时间】:2021-09-17 00:35:24
【问题描述】:

我有一个简单的 SpringBoot 应用程序。这是我的 Dockerfile

FROM openjdk:18-jdk
LABEL version="1.0"

ARG PROJECT_NAME="test"
ARG PROJECT_VERSION="0.0.1"
ARG JAR_FILE="${PROJECT_NAME}-${PROJECT_VERSION}.jar"
ARG APP_HOME=/opt/deployment
ARG PROJECT_HOME=${APP_HOME}/${PROJECT_NAME}

COPY target/${JAR_FILE} ${PROJECT_HOME}/${JAR_FILE}

# Change working directory
WORKDIR ${PROJECT_HOME}


# Entrypoint
ENTRYPOINT ["java", "-jar", ${JAR_FILE}]

当我运行它时,我收到以下错误:

/bin/sh: [java,: command not found

但是当我在 ENTRYPOINT 中提供直接 jar 文件(todo-0.0.1.jar)而不是 ${JAR_FILE} 时,它正在工作。如何在 ENTRYPOINT 中使用变量?

请帮忙

【问题讨论】:

    标签: spring-boot dockerfile


    【解决方案1】:

    "与 shell 形式不同,exec 形式不调用命令 shell。这意味着正常的 shell 处理不会发生。例如,RUN [ "echo", "$HOME" ] 不会对 $ 进行变量替换HOME. 如果你想要 shell 处理,那么要么使用 shell 形式,要么直接执行 shell,例如:RUN [ "sh", "-c", "echo $HOME" ]. 当使用 exec 形式并直接执行 shell , 与 shell 形式的情况一样,是 shell 进行环境变量扩展,而不是 docker。”

    来源 = https://docs.docker.com/engine/reference/builder/

    所以我认为你需要这样的东西。

    [ "sh", "-c", "java -jar $JAR_FILE" ]

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-20
      • 1970-01-01
      • 1970-01-01
      • 2022-01-09
      • 1970-01-01
      • 1970-01-01
      • 2018-11-27
      • 2022-01-20
      相关资源
      最近更新 更多