【发布时间】:2017-03-18 14:03:10
【问题描述】:
我在 AWS 上有两个 elastic-beanstalk 环境:开发和生产。我在每个实例上运行 glassfish 服务器,并要求在生产和开发环境中部署相同的应用程序包,而不需要两个不同的 .EAR 文件。两个实例的大小不同:开发人员有一个微型实例虽然生产有一个中等实例,因此我需要为 glassfish 部署两个不同的配置文件,每个环境一个。
主要问题是该文件必须在服务器启动之前位于 glassfish 配置目录中,因此我认为在创建容器时移动它会更好。
当然每个环境都使用一个 docker 容器来托管 glassfish 实例,所以我的第一个想法是为 elastic-beanstalk 配置一个环境变量。在这种情况下
ypenvironment = dev
用于开发环境和
ypenvironment = pro
用于生产环境。然后在我的 DOCKERFILE 中,我将这条语句放在 RUN 命令中:
RUN if [ "$ypenvironment"="pro" ] ; then \
mv --force /var/app/GF_domain.xml /usr/local/glassfish/glassfish/domains/domain1/config/domain.xml ; \
elif [ "$ypenvironment"="dev" ] ; then \
mv --force /var/app/GF_domain.xml.dev /usr/local/glassfish/glassfish/domains/domain1/config/domain.xml ; \
fi
很遗憾,启动完成后,两个 GF_domain 文件都还在var/app。
然后我发现 RUN 命令在容器完全加载之前运行东西,可能缺少 elastic-beanstalk-injected 变量。所以我试图将代码移动到 ENTRYPOINT 指令。再次没有运气,容器启动失败。也试过了
ENTRYPOINT ["command", "param"]
语法,但给出一个
不起作用System error: exec: "if": executable file not found in $PATH
所以我被卡住了。
【问题讨论】:
标签: amazon-web-services docker amazon-elastic-beanstalk