在入口点

时间:2019-07-30 23:55:49

标签: java shell docker dockerfile docker-entrypoint

我有一个dockerfile,声明了一些稍后在入口点中使用的环境变量,但是入口点从不获取这些变量的值。我尝试了壳窗体,但看起来它什么也没做。这是我的示例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变量,以便它能够为传入的参数分配适当的值。通过互联网上的几篇文章和内容进行了尝试,并尝试了许多方法来完成这项工作,但似乎一次都没有。

1 个答案:

答案 0 :(得分:2)

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

您还需要使用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
相关问题