尝试使用 bitbucket 管道调用 docker 中的 url 服务

Trying to call an url of service in docker with bitbucket pipelines

我正在尝试测试 docker 容器中的服务 运行 是否正常,所以我想调用 url 'http://localhost:3000/test' 并检查它是否为 200 . 在所有其他情况下,我想让我的 bitbucket 管道失败。

所以一开始我尝试 curl 它,但我没有得到任何输出或错误。

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

失败

感谢您的帮助。

首先删除 -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 }')

第一部分解释的很好here,然后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 }') || exit 1"

编辑

差异在这里有点矫枉过正,所以试试这个

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

前缀 "code" 用于在 wget 无法连接时抑制警告,awk return 不会导致 [ ] 抱怨。

这是我在其他答案的评论中建议的更简单的解决方案。如果您只想在出错时退出脚本,您可以简单地测试退出状态:

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

哎呀,如果你想要更多的控制和错误报告,你甚至可以使用 $? 测试退出状态。 Wget returns 相当信息退出状态。在这里引用手册:

EXIT STATUS Wget may return one of several error codes if it encounters problems.

   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.