Остановка сборки Docker после сбоя RUN в многоступенчатой ​​сборке - PullRequest
0 голосов
/ 12 февраля 2019

У меня есть Dockerfile, который состоит из нескольких этапов.Промежуточная стадия проходит испытания.Если тест не пройден, я хотел бы остановить сборку, но она будет продолжена, как указано ниже.Вы можете увидеть выходные данные там, где они продолжаются после неудачной команды RUN.

# Base image
FROM python:3.5 as base


# For running tests
FROM base
WORKDIR /root

RUN mkdir /root/src
ADD src/requirements.txt /root/src
RUN pip install -r /root/src/requirements.txt

ADD . /root
RUN ["/bin/bash", "-c", "cd test; ./run-tests.sh"]


# For publishing src files

FROM base
ADD src /root/src
ADD .pypirc /root/.pypirc


WORKDIR /root/src

CMD python setup.py sdist upload -r local

Вывод:

Step 6/13 : RUN pip install -r /root/src/requirements.txt
 ---> Using cache
 ---> 56fa7fc2f2e8
Step 7/13 : ADD . /root
 ---> 74c52977edcf
Step 8/13 : RUN ["/bin/bash", "-c", "cd test; ./run-tests.sh"]
 ---> Running in 68a184ab54af
...
----------------------------------------------------------------------
Ran 1 test in 10.122s

FAILED (failures=1)
The command '/bin/bash -c cd test; ./run-tests.sh' returned a non-zero code: 1
running sdist
running egg_info
...
running upload
Submitting dist/<artifact-name>-2.6.1.2.tar.gz to https://<subdomain>.jfrog.io/<context>/api/pypi/python-local
...

1 Ответ

0 голосов
/ 12 февраля 2019

Ваша команда, run-tests.sh, должна выйти с ненулевым кодом выхода, и докер прекратит сборку.В этом случае это произошло:

The command '/bin/bash -c cd test; ./run-tests.sh' returned a non-zero code: 1

Все, что вы запускаете для вызова docker build, должно обрабатывать этот код выхода и останавливаться в этой точке.Поведение Docker состоит в том, чтобы дать вам код выхода для обозначения ошибки:

$ cat df.fail
FROM busybox
RUN exit 1
RUN echo still running

$ docker build -f df.fail .
Sending build context to Docker daemon  23.04kB
Step 1/3 : FROM busybox
 ---> 59788edf1f3e
Step 2/3 : RUN exit 1
 ---> Running in 70d90fb88d6e
The command '/bin/sh -c exit 1' returned a non-zero code: 1

$ echo $?
1

Из приведенного выше примера вы можете видеть, что docker останавливается, как только команда возвращает ненулевой код выхода, онане запускайте строку echo still running, и есть ненулевой код возврата из docker build, который вы можете обрабатывать с помощью всего, что вы используете для запуска сборки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...