Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

286
Visualizações
Bloque condicional en Docker

He estado usando docker desde hace algún tiempo. Me encontré con una situación en la que necesito ejecutar instrucciones presentes en el Dockerfile en función de alguna condición. Por ejemplo, aquí está el fragmento de Dockerfile

 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 ......

Entonces, como puede ver en mi archivo docker, tengo instrucciones de instalación para maven y ant. Pero ahora tengo que instalar cualquiera de ellos según una condición. Sé que puedo usar la instrucción ARG en Dockerfile para obtener el argumento durante el tiempo de compilación, pero el problema es que no pude encontrar ningún documento sobre cómo incluirlos en un bloque if/else .

También he leído algunas otras publicaciones de stackoverflow con respecto a esto, pero en esas veo que han pedido usar declaraciones condicionales dentro de una instrucción, por ejemplo RUN if $BUILDVAR -eq "SO"; then export SOMEVAR=hello; else export SOMEVAR=world; fi Link , o escribiendo un archivo de script separado como este Pero como puede ver, mi caso es diferente. No puedo hablar de esto ya que también tendría un montón de otras instrucciones que dependerían de ese argumento. tengo que hacer algo como esto

 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
about 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

Si no desea usar todas esas declaraciones RUN if , puede crear un script bash con el procedimiento de configuración y llamarlo desde Dockerfile. Por ejemplo:

 FROM centos:centos7 MAINTAINER Someone <someone@email.com> ARG BUILD_TOOL COPY setup.sh /setup.sh RUN ./setup.sh RUN rm /setup.sh

Y el archivo setup.sh (no olvides hacerlo ejecutable):

 if [ "${BUILD_TOOL}" = "MAVEN" ]; then echo "Step 1 of MAVEN setup"; echo "(...)"; echo "Done MAVEN setup"; elif [ "${BUILD_TOOL}" = "ANT" ]; then echo "Step 1 of ANT setup"; echo "(...)"; echo "Done ANT setup"; fi

Luego puede construirlo usando docker build --build-arg BUILD_TOOL=MAVEN . (o ANT ).

Tenga en cuenta que usé un script de shell aquí, pero si tiene otros intérpretes disponibles (por ejemplo, python o ruby), también puede usarlos para escribir el script de configuración.

about 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda