Docker healthcheck文档显示了curl的情况:
HEALTHCHECK --interval=5m --timeout=3s \ CMD curl -f http://localhost/ || exit 1
字符串我希望在wget中有一行等价的代码,当HTTP 200没有返回时,它将退出1。
vmjh9lq91#
以下似乎是等价的:
HEALTHCHECK --interval=5m --timeout=3s \ CMD wget --no-verbose --tries=1 --spider http://localhost/ || exit 1
字符串其中:
--no-verbose
--tries=1
--spider
exit 1
Docker compose示例:
healthcheck: test: wget --no-verbose --tries=1 --spider http://localhost || exit 1 interval: 5m timeout: 3s retries: 3 start_period: 2m
型https://docs.docker.com/compose/compose-file/compose-file-v3/#healthcheck
8e2ybdfx2#
Dennis Hoer的回答很棒,但我更喜欢-nv(--no-verbose)而不是--quiet,那么如果发生错误,原因可以从Docker获得:
-nv
--quiet
HEALTHCHECK --interval=5s --timeout=5s --retries=3 \ CMD wget -nv -t1 --spider 'http://localhost:8000/' || exit 1
字符串Docker捕获的示例输出:
% docker inspect $container --format "{{ (index (.State.Health.Log) 0).Output }}" Connecting to localhost:8000 (127.0.0.1:8000) wget: server returned error: HTTP/1.1 404 Not Found
型
bzzcjhmw3#
我有另一个解决办法:
#!/bin/bash exec 3<>/dev/tcp/localhost/"$1" echo -e "GET /path/to/health/endpoint/ HTTP/1.1 host: localhost:$1 " >&3 timeout 1 cat <&3 | grep status | grep UP || exit 1
字符串在你的compose中使用这个脚本.yaml
healthcheck: test: [ 'CMD-SHELL', '/bin/bash -c "/path/to/healthcheck.sh 8081"' ] ...
型我总结了为什么这在这里工作:https://github.com/dart-lang/dart-docker/issues/58
f5emj3cl4#
如果你想做一个GET请求和打印突出做
GET
wget -qO - http:/localhost/
字符串它告诉wget完全是-q,并写入标准输出-O -。
-q
-O -
healthcheck: test: wget -qO - localhost || exit 1
型请注意,另一种解决方案使用--spider,发出HEAD请求。
HEAD
4条答案
按热度按时间vmjh9lq91#
以下似乎是等价的:
字符串
其中:
--no-verbose
-关闭verbose而不完全安静(使用-q),这意味着错误消息和基本信息仍然会被打印出来。--tries=1
-如果未设置,某些wget实现将在未返回HTTP 200响应时无限期重试。--spider
-作为一个网络蜘蛛,这意味着它不会下载页面,只是检查它们是否在那里。exit 1
-确保失败时退出代码为1。Heathcheck仅要求以下内容:Docker compose示例:
型
https://docs.docker.com/compose/compose-file/compose-file-v3/#healthcheck
8e2ybdfx2#
Dennis Hoer的回答很棒,但我更喜欢
-nv
(--no-verbose
)而不是--quiet
,那么如果发生错误,原因可以从Docker获得:字符串
Docker捕获的示例输出:
型
bzzcjhmw3#
我有另一个解决办法:
字符串
在你的compose中使用这个脚本.yaml
型
我总结了为什么这在这里工作:
https://github.com/dart-lang/dart-docker/issues/58
f5emj3cl4#
如果你想做一个
GET
请求和打印突出做字符串
它告诉wget完全是
-q
,并写入标准输出-O -
。型
请注意,另一种解决方案使用
--spider
,发出HEAD
请求。