0

我有一个 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 变量,以便它能够为传入的参数分配适当的值。浏览了互联网上的几篇文章和资料,并尝试了很多方法来获得这个工作,但似乎没有工作一次。

4

1 回答 1

3

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

您还需要使用 shell 形式ENTRYPOINT来获取可以进行环境变量替换的 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
于 2019-07-31T01:18:45.333 回答