Как прекратить сборку Когда я использую образ сборки Dockerfile? - PullRequest
0 голосов
/ 01 ноября 2018

Я пишу некоторые шелл-коды в моем Dockerfile ниже, чтобы проверить некоторые каталоги в контейнере, если у него нет тех папок, которые я хочу прекратить строить. Так что я должен написать в Dockerfile, чтобы остановить его?

FROM XXX
...
RUN if [ -d "/app/bin" -a  -d "/app/lib" -a -d "/app/conf" -a -d "/app/resource" -a -d "/app/log" -a -f "/app/bin/start.sh" ]; then mkdir -p /app/control/bin;  else SOME_CODES_TO_STOP_BUILDING; fi
...

Ответы [ 2 ]

0 голосов
/ 01 ноября 2018

Любая команда оболочки, которая потерпит неудачу (возвращает состояние выхода, отличное от 0), остановит сборку. Некоторые примеры:

# Probably the most idiomatic shell scripting: if the test
# returns false, then the "&&" won't run mkdir, and the whole
# command returns false
RUN test -d /app/bin -a ... \
 && mkdir /app/control/bin

# "test" and "[" are the same thing
RUN [ -d /app/bin -a ... ] \
 && mkdir /app/control/bin

# This first step will just blow up the build if it fails
RUN [ -d /app/bin -a ... ]
# Then do the on-success command
RUN mkdir /app/control/bin

# Your original suggestion
# /bin/false does nothing but returns 1
RUN if [ -d /app/bin -a ... ]; \
    then mkdir /app/control/bin; \
    else false; \
    fi
0 голосов
/ 01 ноября 2018

Не хотите ли проверить эти каталоги перед созданием образа? Я бы предложил создать сценарий оболочки и выполнить команду сборки docker, только если каталоги присутствуют.

...