Выполнить команду bash, если контейнер-докер не существует
На машине Jenkins я хотел бы создать контейнер докеров с указанным именем, только если он еще не существует (в оболочке script). Я думал, что могу запустить команду для создания контейнера независимо и проигнорировать сбой, если он есть, но это приводит к тому, что моя работа с jenkins не работает.
Следовательно, я хотел бы знать, как я могу проверить, существует ли контейнер докеров или нет с помощью bash.
Ответы
Ответ 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