【问题标题】:Access dockerfile ENV variables in entrypoint在入口点访问 dockerfile ENV 变量
【发布时间】:2019-07-30 23:55:49
【问题描述】:

我有一个 dockerfile,它声明了一些稍后在入口点中使用的环境变量,但入口点从不获取这些变量的值。我尝试了 shell 形式,但看起来它什么也没做。这是我的示例 dockerfile:-

FROM java:8
ENV JAVA_OPTS="
RUN apt-get -y install ca-certificates curl
RUN mkdir /app
RUN mkdir /docker
CMD ["java", "-version"]
ADD /target/app.jar /app/app.jar
ENV spring.profiles.active dev
ENV encryptor.password xyz
COPY entrypoint.sh /docker/entrypoint.sh
RUN ["chmod", "+x", "/docker/entrypoint.sh"]
EXPOSE 8080
ENTRYPOINT ["/bin/bash", "-c", "/docker/entrypoint.sh"]
CMD ""

我的 entrypoint.sh 非常简单,并且使用了这些 ENV 变量:-

#!/bin/bash
java -Djava.security.egd="file:/dev/./urandom" -Dencryptor.password=$encryptor.password -Dspring.profiles.active=$spring.profiles.active -jar /app/app.jar

我应该如何让我的 ENTRYPOINT 能够访问之前在 Dockerfile 中声明的那些 ENV 变量,以便它能够为传入的参数分配适当的值。在互联网上浏览了几篇文章和资料并尝试了很多方法完成这项工作,但似乎一次都没有工作。

【问题讨论】:

    标签: java shell docker dockerfile docker-entrypoint


    【解决方案1】:

    我认为一个问题是环境变量名称中的句点(点)。我认为,有效的标识符可能只包含字母数字字符和下划线。

    您还需要使用ENTRYPOINT 的shell 形式来获得可以进行环境变量替换的shell:

    FROM busybox
    
    ENV spring_profiles_active dev
    ENV encryptor_password xyz
    
    ENTRYPOINT echo ${spring_profiles_active} ${encryptor_password}
    

    然后:

    docker build --tag=example --file=./Dockerfile .
    docker run --interactive --tty example
    

    返回:

    dev xyz
    

    【讨论】:

    • 我猜你需要告诉 OP dot 不是 shell 标识符中的有效字符。
    • 这是我回答的第一行。
    • 哦,抱歉,我的母语不是英语。我不知道periods 与dot 相同...
    • 谢谢大家。那成功了。不知道为什么 shell 有点问题。将确保变量的 java 编码不使用点。
    猜你喜欢
    • 1970-01-01
    • 2017-03-13
    • 1970-01-01
    • 1970-01-01
    • 2019-01-29
    • 1970-01-01
    • 2017-11-14
    • 1970-01-01
    • 2022-10-07
    相关资源
    最近更新 更多