dokku/waitdocker-wait 是一个轻量级(仅9MB)的Docker实用工具,其核心功能是阻塞当前进程,直到指定的其他容器或主机开始接受TCP连接。如果在设定的超时时间内无法建立连接,工具会报错并退出。该工具主要用于确保依赖服务(如数据库、缓存等)完全启动并可连接后,再启动依赖它的服务,从而避免因依赖服务未就绪导致的启动失败问题。
EXPOSE端口并等待其TCP连接适用于Docker环境中需要控制容器启动顺序的场景,特别是:
当容器通过--link参数链接到其他容器时,docker-wait会自动检测被链接容器的所有EXPOSE端口并等待其TCP连接。
示例:
shell# 启动一个需要等待的服务容器 $ docker run -d --name mycontainer some-image-or-other # 运行wait工具,链接到目标容器并等待其所有暴露端口 $ docker run --link mycontainer:mycontainer --rm dokku/wait Waiting for 172.17.0.105:5432 . up! Everything is up
注意:链接别名(此处为
mycontainer)不影响检测结果,工具会自动识别被链接容器的所有暴露端口。
通过-p参数可以指定仅等待被链接容器的部分端口,忽略其他未指定的端口。
参数格式:-p <端口1>,<端口2>,...(多个端口用逗号分隔)
示例:
shell# 启动服务容器 $ docker run -d --name mycontainer some-image-or-other # 仅等待5432端口(忽略其他暴露端口如6379) $ docker run --link mycontainer:mycontainer --rm dokku/wait -p 5432 Not checking 172.17.0.105:6379 because port is not included. Waiting for 172.17.0.105:5432 . up! Everything is up
当需要等待未通过Docker链接的主机或端口时,可通过-c参数手动指定目标连接。
参数格式:-c <主机1>:<端口1>,<主机2>:<端口2>,...(多个目标用逗号分隔)
示例:
shell# 等待8.8.8.8的53端口和github.com的443端口 $ docker run --rm dokku/wait -c 8.8.8.8:53,github.com:443 Waiting for 8.8.8.8:53 . up! Waiting for github.com:443 . up! Everything is up
默认每个连接的超时时间为30秒,可通过-t参数自定义超时秒数。超时后工具会立即报错并以状态码1退出。
参数格式:-t <超时秒数>
示例:
shell# 等待github.com的5432端口,超时时间设为15秒 $ docker run dokku/wait -c github.com:5432 -t 15 Waiting for github.com:5432 ............................... ERROR: unable to connect
manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务