2015-11-03 40 views
0

我使用Vagrant和Docker来创建开发环境,但是我遇到了一些问题。 我有一个config.yaml文件,其中包含一个变量“drush_version”。Vagrant env变量到Docker构建

然后在我的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文件中。

我认为这个问题是我需要的“泊坞窗构建”期间,通过这个变量,而不是“泊坞窗跑”,但我真的不知道该怎么办呢?

哪有我将Vagrant的变量传递给“docker build”? 有人能指引我正确的方向吗?

非常感谢

回答

1

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

有一个在1.9.0里程碑,它将允许你通过建立变量为docker build功能,但这种有效的给你一样,那么在您Dockerfile定义自己的ENV变量。

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

不过现在,你需要硬代码版本号在你的Dockerfile

实际上,这并不是一件坏事,因为这意味着您的构建将是可重复的(即,除了您的Dockefile以外,不会有任何依赖关系)。

+0

非常感谢您的回答!我花了这么多时间试图做到这一点...... – TehesFR

+0

编辑:1.9.0已经发布今天上午,我会尝试新的ARG指令:https://github.com/docker/docker/releases/tag/ v1.9.0 – TehesFR