【发布时间】:2017-03-10 13:06:08
【问题描述】:
我已经使用 docker 有一段时间了。我遇到了一种情况,我需要根据某些条件执行 Dockerfile 中存在的指令。比如这里是Dockerfile的sn-p
FROM centos:centos7
MAINTAINER Akshay <akshay@dm.com>
# Update and install required binaries
RUN yum update -y \
&& yum install -y which wget openssh-server sudo java-1.8.0-openjdk \
&& yum clean all
#install Maven
RUN curl -Lf http://archive.apache.org/dist/maven/maven-3/3.3.9/binaries/apache-maven-3.3.9-bin.tar.gz -o /tmp/apache-maven-3.3.9.tar.gz
RUN tar -xzf /tmp/apache-maven-3.3.9.tar.gz -C /opt \
&& rm /tmp/apache-maven-3.3.9.tar.gz
ENV M2_HOME "/opt/apache-maven-3.3.9"
ENV PATH ${PATH}:${M2_HOME}/bin:
# Install Ant
ENV ANT_VERSION 1.9.4
RUN cd && \
wget -q http://archive.apache.org/dist/ant/binaries/apache-ant-${ANT_VERSION}-bin.tar.gz && \
tar -xzf apache-ant-${ANT_VERSION}-bin.tar.gz && \
mv apache-ant-${ANT_VERSION} /opt/ant && \
rm apache-ant-${ANT_VERSION}-bin.tar.gz
ENV ANT_HOME /opt/ant
ENV PATH ${PATH}:/opt/ant/bin
......
正如您在我的 docker 文件中看到的那样,我有 maven 和 ant 的安装说明。但现在我必须根据条件安装其中一个。我知道我可以在 Dockerfile 中使用 ARG 指令在构建期间获取参数,但问题是我找不到任何关于如何将它们包含在 if/else 块中的文档。
我也读过一些关于此的其他 stackoverflow 帖子,但在那些帖子中,我看到他们要求在指令中使用条件语句,例如 RUN if $BUILDVAR -eq "SO"; then export SOMEVAR=hello; else export SOMEVAR=world; fiLink,或编写单独的脚本文件,如 this
但正如你所见,我的情况不同。我无法做到这一点,因为我也会有一堆其他的指令,这取决于那个论点。我必须做这样的事情
ARG BUILD_TOOL
if [ "${BUILD_TOOL}" = "MAVEN" ]; then
--install maven
elif [ "${BUILD_TOOL}" = "ANT" ]; then
--install ant
fi
.... other instructions ....
if [ "${BUILD_TOOL}" = "MAVEN" ]; then
--some other dependent commands
elif [ "${BUILD_TOOL}" = "ANT" ]; then
--some other dependent commands
fi
【问题讨论】:
-
另请参阅stackoverflow.com/questions/43654656/… 了解不需要任何 bash 的条件 docker 文件
标签: docker dockerfile