【问题标题】:Use environment variables in docker在 docker 中使用环境变量
【发布时间】:2016-02-20 04:28:55
【问题描述】:

我已经实现了 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 文件中的空值并且构建过程失败。

如果没有构建 arg 是不可能的,或者我做错了设置/使用 ENV 的方式

【问题讨论】:

    标签: amazon-ec2 docker parameter-passing dockerfile


    【解决方案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,使用 inside 脚本 $domain(然后启动您的主进程),这将起作用。

    【讨论】:

    • 是的,幸运的是我自己昨天发现了环境问题。由于对 Docker 的经验很少,我不知道脚本是否必须使用 CMD 而不是 RUN 运行才能利用环境变量。所以在 CMD 中运行脚本后,现在环境变量似乎可以工作了。
    • 对于第一个,是的,我知道我可以用 Amazon EMI 替换 Ubuntu,但如果没有替代方案,那将是最后的解决方案。
    • @kuldeep.kamboj 我同意:我只是想通过提及 AMI 部分来涵盖所有角度。
    猜你喜欢
    • 2017-12-01
    • 1970-01-01
    • 2020-12-07
    • 2019-07-26
    • 2015-09-13
    • 2020-11-12
    • 2016-07-16
    相关资源
    最近更新 更多