Связанный ответ Жюля Оллеона работает с постоянно работающими сервисами, такими как веб-серверы, серверы приложений, базы данных и аналогичное программное обеспечение. В вашем примере кажется, что вы хотите запустить контейнер по требованию, который предназначен для некоторой работы, а затем завершить работу. Здесь статус не помогает.
При запуске контейнера в режиме переднего плана, как показано в вашем примере, он перенаправляет код возврата приложений в вызывающую оболочку. Поскольку вы не опубликовали никакого кода, я приведу простой пример: мы создаем сценарий rc.sh
, возвращающий 1 в качестве кода завершения (который обычно указывает на какой-либо сбой):
#!/bin/sh
echo "Testscript failed, returning exitcode 1"
exit 1
Он скопирован ивыполняется в этом Dockerfile
:
FROM alpine:3.7
COPY rc.sh .
ENTRYPOINT [ "sh", "rc.sh" ]
Теперь мы создаем этот образ, используя docker build -t rc-test .
и выполняем недолговечный контейнер:
$ docker run --rm rc-test
Testscript failed, returning exitcode 1
Bash дает нам код возврата в $?
:
$ echo $?
1
Итак, мы видим, что контейнер вышел из строя и может просто проверить их, например, внутри некоторого скрипта bash с условием if , чтобы выполнить какое-либо действие при сбое:
#!/bin/bash
if ! docker run --rm rc-test; then
echo "Docker container failed with rc $?"
fi