使用env变量的git clone项目

时间:2018-05-26 18:23:08

标签: docker docker-compose dockerfile

我有一个Dockerfile,git克隆了这样一个项目:

...
RUN git clone -b 027-infra http://201.57.129.38/arbitrium/api.git
...

我想用环境变量替换027-infra(项目的所需分支),但根据文档https://docs.docker.com/engine/reference/builder/#environment-replacement,RUN指令似乎不支持env变量。不知道为什么!

如何使用外部变量git克隆项目来选择分支?

其他一些信息:

  • 存储库是公共的和开源的。没有ssh键或其他任何问题。
  • 我使用docker-compose和3个服务,其中2个是git clone 2个不同的存储库。最后,我想使用单个变量,因此两个服务都会检出相同的分支名称,但是在不同的存储库中。这就是我无法使用COPY的原因,因为那只会有第一个存储库的上下文。

更新

无法使env变量正常工作,但我使用了args。好像我需要在容器构建期间添加一个ARG调用来接受参数:

...
ARG GIT_BRANCH
RUN git clone -b ${GIT_BRANCH} http://201.57.129.38/arbitrium/web.git
...

并使用docker-compose build或类似docker build --build-arg GIT_BRANCH=027-infra -t arbitrium_api:latest -f Dockerfile_api .

调用构建版本

仍然不明白为什么env变量似乎没有在git clone运行中被替换。

1 个答案:

答案 0 :(得分:1)

RUN"不支持"有点误导?环境变量。出于所有实际目的,它确实支持它们,但是支持是由RUN生成的shell而不是Dockerfile解析器实现的。

因此,在阅读文档之前,请按照您的计划使用环境变量。