在 docker 中使用环境变量

Use environment variables in docker

我已经实施了 docker 自动化设置项目。我在 Ubuntu 服务器上使用 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

我的 Docker 文件有代码

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文件改成了

我的 Docker 文件有代码

RUN /bin/sh /script.sh

但看起来它们在我的场景中不起作用,因为在构建时 sed 脚本替换了 apache 文件中的空值并且构建过程失败。

如果没有构建 arg 是不可能的,或者我做错了 set/use ENV

首先,AWS可以支持docker1.9.
例如参见“Getting overlay networking to work in AWS with Docker 1.9


如果您选择保留旧 AMI 及其 docker 1.7,则 -e option 仅适用于运行时(creating/running 容器),不适用于构建时间(图像)。

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