Попытка вызвать URL службы в Docker с конвейерами bitbucket

Я пытаюсь проверить, хорошо ли работает моя служба в Docker-контейнере, поэтому я хочу вызвать url ' http://localhost:3000/test' и проверить, равно ли оно 200. Во всех других случаях я хочу завершить работу моего конвейера битового сегмента.

Итак, сначала я попытался свернуть его, но я не получил никакого вывода или ошибки.

curl -f "http://localhost:3000/test" || exit 1

Но это все равно проходит, даже если URL-адрес плохой или контейнер не работает вообще.

Тогда я попытался позвонить wget прямо в контейнере, но у меня тоже не получается.

docker exec -ti -t -i mycontainer sh -c "wget http://localhost:3000/test || exit 1" || exit 1

Это терпит неудачу на the input device is not a TTY

Спасибо за вашу помощь.

1 ответ

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

$ wget -q --spider http://localhost:3000/ || exit 1

Черт возьми, если вам нужен больший контроль и отчеты об ошибках, вы можете даже проверить состояние выхода, используя $?, Wget возвращает достаточно информации о статусах выхода. Цитирование руководства здесь:

СОСТОЯНИЕ ВЫХОДА Wget может вернуть один из нескольких кодов ошибок, если он столкнулся с проблемами.

   0   No problems occurred.

   1   Generic error code.

   2   Parse error---for instance, when parsing command-line options, the .wgetrc or .netrc...

   3   File I/O error.

   4   Network failure.

   5   SSL verification failure.

   6   Username/password authentication failure.

   7   Protocol errors.

   8   Server issued an error response.

   With the exceptions of 0 and 1, the lower-numbered exit codes take precedence
   over higher-numbered ones, when multiple types of errors are encountered.

Сначала удалите -ti -t -i в трубе нет tty устройства (терминала). (-ti такой же как -t -i)

Теперь ваш скрипт может проверить, доступен ли URL или нет, чтобы проверить код ответа 200, используйте

wget -q --spider --server-response 'http://localhost:3000/' "${url}" 2>&1 | diff -q <(echo 200) <(awk 'NR==1{print $2}')

первая часть хорошо объяснена здесь, затем diff чтобы увидеть, если код ответа 200.

Ваша последняя команда выглядит

docker exec mycontainer sh -c "wget -q --spider --server-response 'http://localhost:3000/' "${url}" 2>&1 | diff -q "echo 200" <(awk 'NR==1{print $2}') || exit 1"

РЕДАКТИРОВАТЬ

Разница здесь немного излишняя, так что попробуйте

wget -q --spider --server-response 'http://localhost:3000/' "${url}" 2>&1 | [ code`awk 'NR==1{print $2}'` == code200 ] || exit 1

Префикс "код" используется для подавления предупреждения, когда wget не может подключиться, awk ничего не выдаст [ ] жаловаться.

Другие вопросы по тегам