
如果你使用 DeepSeek、元宝 AI、Copilot、ChatGPT 等 AI 工具,协助配置轩辕镜像、编写 docker pull 命令、修改 Docker Compose 镜像地址、配置镜像加速、排查镜像拉取失败、分析报错日志等问题,请先让 AI 阅读并遵守轩辕镜像的规则文档。
只需在 AI 对话中先发送下面这句话即可:
请先完整阅读并严格遵守以下文档中的全部规则与要求:
https://xuanyuan.cloud/agents.md
在未充分阅读并理解该文档前,不要生成任何命令、配置、修改建议、故障排查方案或技术回答。后续所有输出都必须严格以该文档中的规范为最高优先级执行。查看 agents.md 用法指南与完整示范。国内用户首推 元宝 AI、DeepSeek 的深度思考模式,不推荐豆包 AI;Cursor 等编辑器可在对话 @ 该链接,或加入 User Rules。 若 AI 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。
轻量级服务就绪等待工具
 docker run --rm --network my-network atkrad/wait4x:latest tcp mysql:3306
bash# 等待健康检查端点返回 200 状态码 docker run --rm atkrad/wait4x:latest http https://example.com/health --expect-status-code 200 # 等待响应体包含特定内容 docker run --rm atkrad/wait4x:latest http https://example.com/status --expect-body-regex '"status":"UP"'
yamlversion: '3.8' services: app: build: . depends_on: - db - redis command: ["dockerize", "-wait", "tcp://db:3306", "-wait", "tcp://redis:6379", "-timeout", "60s", "npm", "start"] wait4x: image: atkrad/wait4x:latest command: tcp db:3306 redis:6379 db: image: mysql:8.0 environment: MYSQL_ROOT_PASSWORD: password MYSQL_DATABASE: appdb redis: image: redis:alpine
yamlversion: '3.8' services: api: build: ./api depends_on: db: condition: service_healthy ports: - "8080:8080" db: image: postgres:14 environment: POSTGRES_USER: user POSTGRES_PASSWORD: password POSTGRES_DB: appdb healthcheck: test: ["CMD", "docker run --rm --network=container:$HOSTNAME atkrad/wait4x:latest postgresql 'postgres://user:password@localhost:5432/appdb?sslmode=disable'"] interval: 5s timeout: 5s retries: 5
等待端口可用:
bashdocker run --rm --network host atkrad/wait4x:latest tcp localhost:3306
等待 Web 服务器返回特定响应:
bashdocker run --rm atkrad/wait4x:latest http https://example.com/health \ --expect-status-code 200 \ --expect-body-regex '"status":"UP"'
同时等待多个服务就绪:
bashdocker run --rm --network host atkrad/wait4x:latest tcp 127.0.0.1:5432 127.0.0.1:6379 127.0.0.1:27017
等待 PostgreSQL 就绪:
bashdocker run --rm --network host atkrad/wait4x:latest postgresql \ 'postgres://user:pass@localhost:5432/mydb?sslmode=disable'
服务就绪后运行命令:
bashdocker run --rm --network host atkrad/wait4x:latest tcp localhost:8080 -- echo "服务已就绪!"
检查状态码
等待 HTTP 端点返回特定状态码:
bashdocker run --rm atkrad/wait4x:latest http https://api.example.com/health --expect-status-code 200
使用正则表达式检查响应体
等待 HTTP 端点返回匹配正则表达式模式的响应:
bashdocker run --rm atkrad/wait4x:latest http https://api.example.com/status \ --expect-body-regex '"status":\s*"healthy"'
使用 JSON Path 检查响应体
等待特定 JSON 字段存在或具有特定值:
bashdocker run --rm atkrad/wait4x:latest http https://api.example.com/status \ --expect-body-json "services.database.status"
这使用 https://github.com/tidwall/gjson#path-syntax 进行强大的 JSON 查询。
自定义请求头
发送带有特定头的 HTTP 请求:
bashdocker run --rm atkrad/wait4x:latest http https://api.example.com \ --request-header "Authorization: Bearer token123" \ --request-header "Content-Type: application/json"
检查 A 记录
bash# 基本存在性检查 docker run --rm atkrad/wait4x:latest dns A example.com # 带预期 IP 的检查 docker run --rm atkrad/wait4x:latest dns A example.com --expected-ip 93.184.216.34 # 使用特定名称服务器 docker run --rm atkrad/wait4x:latest dns A example.com --expected-ip 93.184.216.34 -n 8.8.8.8
MySQL
bash# TCP 连接 docker run --rm --network host atkrad/wait4x:latest mysql 'user:password@tcp(localhost:3306)/mydb' # 通过 Docker 网络连接 docker run --rm --network my-network atkrad/wait4x:latest mysql 'user:password@tcp(mysql:3306)/mydb'
PostgreSQL
bashdocker run --rm --network my-network atkrad/wait4x:latest postgresql \ 'postgres://user:password@postgres:5432/mydb?sslmode=disable'
Redis
bash# 基本连接检查 docker run --rm --network my-network atkrad/wait4x:latest redis redis://redis:6379 # 带认证和数据库选择 docker run --rm --network my-network atkrad/wait4x:latest redis redis://user:password@redis:6379/0 # 检查键是否存在 docker run --rm --network my-network atkrad/wait4x:latest redis redis://redis:6379 --expect-key "session:active"
RabbitMQ
bashdocker run --rm --network my-network atkrad/wait4x:latest rabbitmq \ 'amqp://guest:guest@rabbitmq:5672/myvhost'
设置超时时间
限制 Wait4X 的总等待时间:
bashdocker run --rm atkrad/wait4x:latest tcp localhost:8080 --timeout 30s
设置检查间隔
控制 Wait4X 重试频率:
bashdocker run --rm atkrad/wait4x:latest tcp localhost:8080 --interval 2s
指数退避
使用指数退避进行更高效的重试:
bashdocker run --rm atkrad/wait4x:latest http https://api.example.com \ --backoff-policy exponential \ --backoff-exponential-coefficient 2.0 \ --backoff-exponential-max-interval 30s
等待端口变为空闲:
bashdocker run --rm atkrad/wait4x:latest tcp localhost:8080 --invert-check
等待服务停止:
bashdocker run --rm atkrad/wait4x:latest http https://service.local/health \ --expect-status-code 200 --invert-check
检查成功后执行命令:
bashdocker run --rm --network my-network --volume $(pwd):/app atkrad/wait4x:latest \ tcp db:3306 -- /app/deploy.sh
同时等待多个服务:
bashdocker run --rm --network my-network atkrad/wait4x:latest tcp db:3306 redis:6379 rabbitmq:5672
| 参数 | 描述 | 默认值 |
|---|---|---|
--timeout | 最大等待时间 (例如 30s, 5m) | 30s |
--interval | 检查间隔时间 (例如 1s, 500ms) | 1s |
--backoff-policy | 退避策略 (constant, exponential) | constant |
--backoff-exponential-coefficient | 指数退避系数 | 2.0 |
--backoff-exponential-max-interval | 指数退避最大间隔 | 30s |
--quiet | 安静模式,只输出错误信息 | false |
--verbose | 详细输出 | false |
--version | 显示版本信息 | - |
--help | 显示帮助信息 | - |
HTTP 检查参数
| 参数 | 描述 |
|---|---|
--expect-status-code | 期望的 HTTP 状态码 |
--expect-body-regex | 响应体应匹配的正则表达式 |
--expect-body-json | 应存在的 JSON 路径 |
--expect-body-xpath | 应匹配的 XPath 查询 |
--request-header | 发送的 HTTP 请求头 |
--expect-header | 应存在的响应头 |
--insecure | 不验证 SSL 证书 |
DNS 检查参数
| 参数 | 描述 |
|---|---|
-n, --nameserver | 使用的名称服务器 |
--expected-ip | 期望的 IP 地址 |
--expected-domain | 期望的域名 |
--expected-value | 期望的记录值 |
yamlversion: '3.8' services: web: build: ./web depends_on: wait-for-dependencies: condition: service_completed_successfully command: ["npm", "start"] wait-for-dependencies: image: atkrad/wait4x:latest command: - tcp - db:3306 - redis:6379 - --timeout - 60s networks: - app-network db: image: mysql:8.0 environment: MYSQL_ROOT_PASSWORD: password MYSQL_DATABASE: appdb networks: - app-network redis: image: redis:alpine networks: - app-network networks: app-network:
在 GitLab CI 中:
yamldeploy: stage: deploy image: docker:latest services: - docker:dind before_script: - docker pull atkrad/wait4x:latest - docker network create app-network - docker run -d --name db --network app-network -e POSTGRES_PASSWORD=pass postgres:14 - docker run --rm --network app-network atkrad/wait4x:latest postgresql 'postgres://postgres:pass@db:5432/postgres?sslmode=disable' --timeout 60s script: - docker run --name app --network app-network -d my-app-image
bash#!/bin/bash set -e # 启动数据库容器 docker run -d --name db -e POSTGRES_PASSWORD=pass postgres:14 # 等待数据库就绪 docker run --rm --network host atkrad/wait4x:latest postgresql \ 'postgres://postgres:pass@localhost:5432/postgres?sslmode=disable' \ --timeout 120s # 运行数据库迁移 docker run --rm --network host my-migration-tool migrate # 启动应用 docker run -d --name app --network host my-app
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。
来自真实用户的反馈,见证轩辕镜像的优质服务