我已经实现了自动化设置的docker项目。我在Ubuntu Server上使用docker 1.9并使用功能build-arg
。我在apache虚拟主机文件中使用它来设置动态子域。
docker build --no-cache --build-arg domain=demo1.myapp.com -t imagename .
docker run -d -p 8080:80 imagename
我使用域并使用我的脚本文件中的sed命令将其替换为虚拟主机文件
sed -i -e "s/defaulthost.com/$domain/g" /etc/apache2/sites-enabled/myApp.conf
我的Dockerfile有代码
ARG domain
RUN /bin/sh /script.sh $domain
现在我需要在我获得Amazon Linux AMI的AWS上迁移应用程序。但是在这里我得到支持的docker版本1.7,它不支持build-arg
。我尝试升级但很多依赖项阻止了我。
现在我决定使用如下的ENV环境变量。
docker run -d -p 8080:80 -e domain=demo1.myapp.com
我也改变了像
这样的Docker文件我的Dockerfile有代码
RUN /bin/sh /script.sh
但看起来它们在我的场景中不起作用,因为在构建时sed脚本替换apache文件中的空值并且构建过程失败。
如果没有build arg是不可能的,或者我在设置/使用ENV
方面做错了答案 0 :(得分:1)
首先,AWS可以支持docker 1.9 例如,请参阅“Getting overlay networking to work in AWS with Docker 1.9”
如果您选择使用旧的AMI及其docker 1.7,那么-e
option仅用于运行时(创建/运行容器),而不是构建时间(图像)。
这意味着,如果您的ENTRYPOINT
或CMD
是:/script.sh
,则使用内部脚本$domain
(然后启动主要流程)那会起作用。