我正在使用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”? 有人能指出我正确的方向吗?
非常感谢
答案 0 :(得分:1)
不幸的是,目前这是不可行的。
1.9.0里程碑中有一个功能允许您将构建变量传递给docker build
,但这有效地为您提供了与ENV
变量相同的功能。 1}}。
https://github.com/docker/docker/issues/14634
目前,您需要在Dockerfile
。
实际上,这并不是一件坏事,因为这意味着你的构建将是可重复的(即,不会对你的Dockerfile
以外的任何东西产生依赖。)