在入口点访问 dockerfile ENV 变量

Access dockerfile ENV variables in entrypoint

我有一个 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 变量,以便它能够为传入的参数分配适当的值。浏览了互联网上的几个帖子和东西并尝试了很多有很多方法可以完成这项工作,但似乎一次都行不通。

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

您还需要使用 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

Returns:

dev xyz