You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker Stack配置healthcheck时如何引用extension fields中的API Token

失败原因说明

  1. YAML锚点引用仅作用于独立的YAML节点,不会解析字符串内部的锚点标识,因此直接写在URL字符串里的**third-party-api-token不会被替换。
  2. 之前尝试环境变量方案时使用["CMD", ...]的exec执行模式不会启动shell,无法解析环境变量占位符,因此读取不到传入的变量值。

可行解决方案

方案1:直接通过YAML锚点拼接健康检查参数

将URL拆分为多个独立参数段,把token锚点作为单独的参数项插入,YAML会自动将相邻的字符串参数拼接为完整URL传给curl:

x-var: &third-party-api-token "API_TOKEN_HERE"

services:
  nginx:
    image: *baseline-nginx-image
    environment:
      <<: *common-env-variables
    networks:
      - default
    ports:
      - 80:8000
    healthcheck:
      test: ["CMD", "curl", "--fail", "-X", "GET", "-H", "Host: my-host", "http://wsgi_server:8000/api/healthcheck?token=", *third-party-api-token]
      interval: 30s
      timeout: 30s
      retries: 5
    depends_on:
      - wsgi_server
    logging: *default-logging
    deploy: *deploy-mode-workers

方案2:通过环境变量传递(灵活性更高)

先将token注入服务的环境变量,再使用CMD-SHELL模式的健康检查命令启动shell解析环境变量,Docker Stack场景下用$$转义避免变量被提前解析:

x-var: &third-party-api-token "API_TOKEN_HERE"

services:
  nginx:
    image: *baseline-nginx-image
    environment:
      <<: *common-env-variables
      THIRD_PARTY_API_TOKEN: *third-party-api-token
    networks:
      - default
    ports:
      - 80:8000
    healthcheck:
      test: ["CMD-SHELL", 'curl --fail -X GET -H "Host: my-host" "http://wsgi_server:8000/api/healthcheck?token=$$THIRD_PARTY_API_TOKEN"']
      interval: 30s
      timeout: 30s
      retries: 5
    depends_on:
      - wsgi_server
    logging: *default-logging
    deploy: *deploy-mode-workers

内容的提问来源于stack exchange,提问作者Symon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 08:06:04