【发布时间】:2019-07-31 21:36:19
【问题描述】:
我在我的 ECS 任务 def 下使用环境变量来拉取值。变量名称是 encryptor.password 我在我的 Dockerfile 中也将它声明为 ENV 变量,具有一些虚拟值,但同时在稍后的入口点部分调用,如下所示:-
ARG pwd
ENV encryptor.password $pwd
# Run the app.jar using the recommended flags per
# https://spring.io/guides/gs/spring-boot-docker/#_containerize_it
ENTRYPOINT ["java","-Dhttp.proxyHost=***",\
"-Dhttps.proxyHost=***","-Dhttp.proxyPort=***",\
"-Dhttps.proxyPort=***","-Djava.net.useSystemProxies=true",\
"-Dhttp.nonProxyHosts=***|/var/run/docker.sock|***|***|***",\
"-Djava.security.egd=file:/dev/./urandom","-Dencryptor.password=${encryptor.password}","-Dspring.profiles.active=dev",\
"-jar","/app/app.jar"]
我的理解是 -Dencryptor.password=${encryptor.password} 实际上应该被容器启动时来自 taskdef 的 ENV 变量 encryptor.password 的值替换为这个 dockerfile 的值,但看起来像入口点没有选择该值。我是不是错过了什么。如何让 Dockerfile 获取该值?
【问题讨论】:
-
你是如何启动你的容器的?如果您使用的是 docker-compose.yaml 文件,它可以将环境变量传递到容器中……请注意,编译 Dockerfile 以合成图像和使用 docker-compose.yaml 启动图像之间存在区别。 .aws 可以与 docker-compose.yaml 一起使用
-
容器刚刚使用 ECS 默认功能在 AWS ECS 中启动。因此,我运行构建和部署,使用具有新映像的新修订更新 taskdef,并更新 ECS 集群中的服务,这会强制在那里的 EC2 中启动新任务(docker 容器),但当入口点执行,因为它似乎无法获得 encryptor.password 的实际值。
标签: amazon-web-services docker dockerfile amazon-ecs