Подтвердить что ты не робот

Выполнить команду bash, если контейнер-докер не существует

На машине Jenkins я хотел бы создать контейнер докеров с указанным именем, только если он еще не существует (в оболочке script). Я думал, что могу запустить команду для создания контейнера независимо и проигнорировать сбой, если он есть, но это приводит к тому, что моя работа с jenkins не работает.

Следовательно, я хотел бы знать, как я могу проверить, существует ли контейнер докеров или нет с помощью bash.

4b9b3361

Ответ 1

Вы можете проверить отсутствие несущего контейнера с помощью grepping для <name> и запустить его позже:

[ ! "$(docker ps -a | grep <name>)" ] && docker run -d --name <name> <image>

лучше:

Используйте https://docs.docker.com/engine/reference/commandline/ps/ и проверьте, не заблокирован ли закрытый контейнер, поэтому вы можете удалить его перед запуском контейнера:

if [ ! "$(docker ps -q -f name=<name>)" ]; then
    if [ "$(docker ps -aq -f status=exited -f name=<name>)" ]; then
        # cleanup
        docker rm <name>
    fi
    # run your container
    docker run -d --name <name> my-docker-image
fi

Ответ 2

Вы можете использовать опции filter и format для команды docker ps, чтобы избежать проводов с помощью утилит unix, таких как grep, awk и т.д.

name='nginx'

[[ $(docker ps -f "name=$name" --format '{{.Names}}') == $name ]] ||
echo "start your nginx docker here"

Ответ 3

Предположим, что

docker container inspect <container-name> || docker run...

так как доклер-контейнер проверяет вызов, он установит $? до 1, если контейнер не существует (не может проверять), но до 0, если он существует (это касается остановленных контейнеров). Таким образом, команда запуска будет вызываться только в случае, если контейнер не существует, как ожидалось.

Ответ 4

Просто префиксное имя с помощью ^/и суффикса с $. Кажется, что это регулярное выражение:

CONTAINER_NAME='mycontainername'

CID=$(docker ps -q -f status=running -f name=^/${CONTAINER_NAME}$)
if [ ! "${CID}" ]; then
  echo "Container doesn't exist"
fi
unset CID

Ответ 5

Я использую следующий код, чтобы определить, существует ли контейнер докеров:

CONTAINER_NAME='my_docker_container'
# Checking if docker container with $CONTAINER_NAME name exists.
COUNT=$(docker ps -a | grep "$CONTAINER_NAME" | wc -l)
if (($COUNT > 0)); then
    echo 'container exists'
fi