在docker中使用环境变量

时间:2015-11-18 12:25:18

标签: amazon-ec2 docker parameter-passing dockerfile

我已经实现了自动化设置的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

方面做错了

1 个答案:

答案 0 :(得分:1)

首先,AWS可以支持docker 1.9 例如,请参阅“Getting overlay networking to work in AWS with Docker 1.9

如果您选择使用旧的AMI及其docker 1.7,那么-e option仅用于运行时(创建/运行容器),而不是构建时间(图像)。

这意味着,如果您的ENTRYPOINTCMD是:/script.sh,则使用内部脚本$domain(然后启动主要流程)那会起作用。