Vagrant 环境变量到 Docker 构建

Vagrant env variable to Docker build

我正在使用 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}"]
.....  

最后在调用的 Docker 文件中,我有:

.....
# 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",可以看到变量定义好了

如果我在 Docker 文件的顶部添加 "ENV DRUSH_VERSION 8.0.0-rc2",它会起作用,但我想在我的 config.yaml 文件中设置它。

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

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

非常感谢

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

1.9.0 里程碑中有一项功能允许您将构建变量传递给 docker build,但这实际上与在您的文件中定义自己的 ENV 变量一样有效Dockerfile.

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

虽然现在,您需要在 Dockerfile 中硬编码您的版本号。

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