【问题标题】:Vagrant env variable to Docker buildVagrant 环境变量到 Docker 构建
【发布时间】:2015-11-03 13:03:22
【问题描述】:

我正在使用 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”? 有人能指出我正确的方向吗?

非常感谢

【问题讨论】:

    标签: docker vagrant vagrantfile dockerfile


    【解决方案1】:

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

    1.9.0 里程碑中有一个功能允许您将构建变量传递给docker build,但这实际上给您提供了与在Dockerfile 中定义自己的ENV 变量相同的功能。

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

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

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

    【讨论】:

    猜你喜欢
    • 2019-02-25
    • 2020-12-07
    • 1970-01-01
    • 1970-01-01
    • 2018-04-20
    • 1970-01-01
    • 2019-09-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多