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

Portainer中Compose的Docker Swarm Secrets无法正确解析问题

Docker Secrets 无法在自制Python Discord Bot中正确解析的问题

我将自行编写的Python Discord Bot部署到家庭服务器上运行Portainer的虚拟机中,遇到Portainer无法正确解析Bot令牌Secret的问题。已定义名为HU3BOT_DISCORD_TOKEN的外部Secret,使用的Compose文件如下:

version: "3.9"
services:
  hu3bot:
    image:  drak3/hu3bot:latest
    environment:
     - DISCORD_TOKEN=/run/secrets/HU3BOT_DISCORD_TOKEN
     - DISCORD_CHANNEL="3d_printing"
     - PRINTER_HOST=voron.srv
     - CAM_PORT_MAIN=8081
     - CAM_PORT_ALT=8080
     - MOONRAKER_API_PORT=7125
     - WEB_URL='https://fluidd.drak3.io'
    secrets:
    - HU3BOT_DISCORD_TOKEN

# the secret is a discord bot token
secrets:
  HU3BOT_DISCORD_TOKEN:
    external: true

本地使用.env文件运行脚本或本地容器均正常,但使用该Secret时无法正确解析。添加打印语句后发现,根据DISCORD_TOKEN的格式不同,令牌要么被解析为None(类型为<class 'NoneType'>),要么被解析为字符串/run/secrets/HU3BOT_DISCORD_TOKEN。

我尝试了多种格式组合,结果均为Secret名称或Null:

  • DISCORD_TOKEN=/run/secrets/HU3BOT_DISCORD_TOKEN
  • DISCORD_TOKEN= /run/secrets/HU3BOT_DISCORD_TOKEN
  • DISCORD_TOKEN:/run/secrets/HU3BOT_DISCORD_TOKEN
  • DISCORD_TOKEN: /run/secrets/HU3BOT_DISCORD_TOKEN
  • "DISCORD_TOKEN=/run/secrets/HU3BOT_DISCORD_TOKEN"
  • "DISCORD_TOKEN= /run/secrets/HU3BOT_DISCORD_TOKEN"
  • "DISCORD_TOKEN:/run/secrets/HU3BOT_DISCORD_TOKEN"
  • "DISCORD_TOKEN: /run/secrets/HU3BOT_DISCORD_TOKEN"

另一个栈使用类似方式(WATCHTOWER_NOTIFICATION_SLACK_HOOK_URL=/run/secrets/DISCORD_WEBHOOK_WATCHTOWER)拉取Webhook Secret却能正常工作。

Secret内容会影响解析吗?我无从解释,恳请提供帮助或建议。

更新:

后续遇到同类问题的用户可参考:我意识到自己误解了Docker Secrets的工作原理。此前以为/run/secrets/secret_name可直接作为Secret值的字面量,传入环境变量等同于使用原始Secret。这种误解源于此前仅使用他人镜像,推测这些镜像有代码区分环境变量值与Docker Secret路径。在Bot中添加此类读取代码后,值可正常解析。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 13:20:32