Определить, успешно ли запущен докер в том же скрипте - PullRequest
1 голос
/ 16 октября 2019

My script.sh :

#/bin/sh
docker run --name foo 

(Просто предположим, что команда docker работает и имя контейнера foo. Невозможно сделать действительную команду общедоступной.)

У меня есть скрипт, который запускает Docker-контейнер. Я хочу проверить, что он успешно запущен и echo статус успешного выполнения на терминале.

Как я могу сделать это, используя container name? Я знаю, что мне нужно использовать что-то вроде docker inspect, но когда я пытаюсь добавить эту команду, она выполняется только после того, как я ^C мой сценарий, вероятно, потому что выполняется в докере.

В этом ответе докер выполняется в каком-то другом сценарии, поэтому он не работает для моего варианта использования.

Ответы [ 3 ]

1 голос
/ 16 октября 2019

Связанный ответ Жюля Оллеона работает с постоянно работающими сервисами, такими как веб-серверы, серверы приложений, базы данных и аналогичное программное обеспечение. В вашем примере кажется, что вы хотите запустить контейнер по требованию, который предназначен для некоторой работы, а затем завершить работу. Здесь статус не помогает.

При запуске контейнера в режиме переднего плана, как показано в вашем примере, он перенаправляет код возврата приложений в вызывающую оболочку. Поскольку вы не опубликовали никакого кода, я приведу простой пример: мы создаем сценарий 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
0 голосов
/ 16 октября 2019

Вам просто нужно выполнить его с "-d", чтобы запустить контейнер в отдельном режиме. При этом решения, представленные в другом посте, или решения, предоставленные @anubhava, являются хорошими решениями.

docker run -d -name some_name mycontainer
s='^some_name$'
status=$(docker ps -qf "name=$s" --format='{{.Status}}')
[[ -n $status ]] && echo "Running: $status" || echo "not running"
0 голосов
/ 16 октября 2019

После выполнения команды docker run вы можете проверить, работает ли ваш док-контейнер:

s='^foo$'

status=$(docker ps -qf "name=$s" --format='{{.Status}}')
[[ -n $status ]] && echo "Running: $status" || echo "not running"
...