Vagrant env变量到Docker构建

时间:2015-11-03 13:03:23

标签: docker vagrant vagrantfile dockerfile

我正在使用Vagrant和Docker创建开发环境,但我遇到了困难。 我有一个config.yaml文件,其中包含几个变量的定义,包括一个“drush_version”。

然后在我的Vagrantfile中,我这样做:

.....
web.vm.provider "docker" do |d|
d.build_dir = "./docker/php/#{php_version}/#{web_server}"
d.create_args = ["--env", "DRUSH_VERSION=#{drush_version}"]
.....  

最后在被调用的Dockerfile中,我有:

.....
# Installation of drush
RUN git clone https://github.com/drush-ops/drush.git /usr/local/src/drush
RUN cd /usr/local/src/drush && git checkout $DRUSH_VERSION
RUN ln -s /usr/local/src/drush/drush /usr/bin/drush
RUN cd /usr/local/src/drush && composer update && composer install
.....

我当时希望用所选版本安装drush,但不幸的是它不起作用...... 问题是,当构建容器时,$ DRUSH_VERSION变量始终为空。

但是在启动docker容器之后,如果我在容器中运行“echo $ DRUSH_VERSION”,我可以看到该变量定义良好。

如果我在Dockerfile的顶部添加“ENV DRUSH_VERSION 8.0.0-rc2”,它会工作,但我想在config.yaml文件中设置它。

我认为问题是我需要在“docker build”期间传递此变量,而不是“docker run”但我真的不知道该怎么做...

如何将变量从Vagrant传递给“docker build”? 有人能指出我正确的方向吗?

非常感谢

1 个答案:

答案 0 :(得分:1)

不幸的是,目前这是不可行的。

1.9.0里程碑中有一个功能允许您将构建变量传递给docker build,但这有效地为您提供了与ENV变量相同的功能。 1}}。

https://github.com/docker/docker/issues/14634

目前,您需要在Dockerfile

中对您的版本号进行硬编码

实际上,这并不是一件坏事,因为这意味着你的构建将是可重复的(即,不会对你的Dockerfile以外的任何东西产生依赖。)