【问题标题】:Use build time environment variable in Docker CMD在 Docker CMD 中使用构建时环境变量
【发布时间】:2020-12-16 10:06:43
【问题描述】:

我有一个 Dockerfile:

...

COPY ${JAR_FILENAME}-*.jar /${JAR_FILENAME}.jar

...

CMD java -jar $(echo /${JAR_FILENAME}.jar)

我正在构建图像:docker build --build-arg JAR_FILENAME='some-file' -t some-name:tag

但是当我运行容器时,我得到:

Error: Unable to access jarfile /.jar

如何在构建期间将环境变量传递给我的CMD 命令,以便我可以运行java -jar some-file.jar

【问题讨论】:

    标签: docker environment-variables


    【解决方案1】:

    您使用 ENV,将其设置为 ARG 的值。 ENV 与 ARG 几乎相同,但会保存到图像元数据中,因此会在您运行容器时持续存在。

    ...
    
    ARG JAR_FILENAME=app.jar
    ENV JAR_FILENAME=${JAR_FILENAME}
    COPY ${JAR_FILENAME}-*.jar /${JAR_FILENAME}.jar
    
    ...
    
    CMD java -jar /${JAR_FILENAME}.jar
    

    请注意,图像的用户可以更改 ENV 值,将图像中的 jar 设置为众所周知的名称可能会更容易:

    ...
    
    COPY ${JAR_FILENAME}-*.jar /app.jar
    
    ...
    
    CMD java -jar /app.jar
    

    【讨论】:

    • 我是盲人。为什么我一开始不使用像app.jar 这样的通用文件名......无论如何,知道我该怎么做总是很好,所以谢谢。
    【解决方案2】:

    使用 Docker 文件中的 ARG 构造从命令行传入构建时间参数。

    阅读文档:https://docs.docker.com/engine/reference/builder/#arg

    【讨论】:

    • 嗨。感谢你的回答。这不是我要找的。​​span>
    • 我明白了,很高兴 - 我同意 @BMitch 的回答。
    猜你喜欢
    • 2019-02-25
    • 1970-01-01
    • 1970-01-01
    • 2014-05-29
    • 1970-01-01
    • 2018-12-18
    • 2016-02-20
    相关资源
    最近更新 更多