Попытка вызвать 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 ничего не выдаст [ ]
жаловаться.