testcontainers/ryukMoby Ryuk 是一个用于在指定延迟后根据给定过滤器自动删除 Docker 资源的工具。它支持按条件清理容器、网络、卷和镜像,通过 TCP 连接接收资源过滤规则,并在连接关闭或超时后执行清理操作,适用于自动化资源管理场景。
health=unhealthy)清理异常容器。label=temp=true)标记临时资源,统一定时清理。需挂载 Docker 守护进程套接字(/var/run/docker.sock)以操作 Docker 资源,并配置端口映射:
bashdocker run -v /var/run/docker.sock:/var/run/docker.sock -e RYUK_PORT=8080 -p 8080:8080 docker.io/testcontainers/ryuk
通过 TCP 客户端(如 nc)连接到 Ryuk 服务:
bashnc localhost 8080
连接建立后,发送过滤规则(键值对格式),每条规则需以 ACK 确认:
bash# 示例:删除标签为 testing=true 且健康状态为 unhealthy 的资源 label=testing=true&health=unhealthy ACK # 示例:删除标签为 something 的资源 label=something ACK
关闭 TCP 连接后,Ryuk 会在延迟后执行清理。
通过管道一次性发送过滤规则(无需手动确认 ACK):
bashprintf "label=something_else" | nc localhost 8080
资源删除后,Ryuk 会输出清理日志,示例如下:
2018/01/15 18:38:52 Timed out waiting for connection 2018/01/15 18:38:52 Deleting {"label":{"something":true}} 2018/01/15 18:38:52 Deleting {"label":{"something_else":true}} 2018/01/15 18:38:52 Deleting {"health":{"unhealthy":true},"label":{"testing=true":true}} 2018/01/15 18:38:52 Removed 1 container(s), 0 network(s), 0 volume(s), 0 image(s)
Ryuk 支持通过环境变量配置行为,具体参数如下:
| 环境变量 | 描述 | 默认值 | 格式说明 |
|---|---|---|---|
RYUK_CONNECTION_TIMEOUT | 首次连接超时时间(未收到连接时的等待时间) | 60s | 遵循 Go 语言 time.ParseDuration 格式,如 30s(30秒)、5m(5分钟)。 |
RYUK_PORT | Ryuk 服务绑定的端口 | 8080 | 整数端口号,需与容器端口映射一致。 |
RYUK_RECONNECTION_TIMEOUT | Docker 连接断开后的重连超时时间 | 10s | 遵循 Go 语言 time.ParseDuration 格式,如 5s(5秒)、1m(1分钟)。 |
bash# 自定义端口和超时配置示例 docker run \ -v /var/run/docker.sock:/var/run/docker.sock \ -e RYUK_PORT=9090 \ -e RYUK_CONNECTION_TIMEOUT=30s \ -e RYUK_RECONNECTION_TIMEOUT=5s \ -p 9090:9090 \ docker.io/testcontainers/ryuk
yamlversion: '3' services: ryuk: image: docker.io/testcontainers/ryuk volumes: - /var/run/docker.sock:/var/run/docker.sock environment: - RYUK_PORT=8080 - RYUK_CONNECTION_TIMEOUT=60s - RYUK_RECONNECTION_TIMEOUT=10s ports: - "8080:8080"
manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务