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

如何在启动Docker容器时指定包含美元符号的环境变量——Redmine SMTP密码配置场景

解决Docker启动Redmine时SMTP密码含美元符号的问题

这个问题我之前配置类似邮件服务的时候也踩过坑,核心原因就是shell会把$开头的字符串当作环境变量来解析,要是这个变量没定义,直接就被替换成空字符串了。这里有几个靠谱的解决办法:

方法一:用单引号包裹密码值

直接用单引号把SMTP_PASS的整个值括起来,shell不会对单引号内部的内容做任何变量解析,美元符号会完完整整传递给容器:

docker run --name=redmine ... --env='SMTP_HOST=host.com' --env='SMTP_USER=user@host.com' --env='SMTP_PASS=$mypassword'

这个方法最直接省心,适合密码里没有单引号的场景。

方法二:用反斜杠转义美元符号

如果因为密码里包含单引号等原因必须用双引号包裹,那就在$前面加反斜杠\转义,告诉shell这是个普通字符,别当变量解析:

docker run --name=redmine ... --env="SMTP_HOST=host.com" --env="SMTP_USER=user@host.com" --env="SMTP_PASS=\$mypassword"

这样shell会把\$解析成单个$,最终容器拿到的密码就是$mypassword。

补充:Docker Compose场景的处理

要是你用docker-compose.yml来配置,反而不需要额外转义,直接写原始密码就行——Docker Compose默认不会解析环境变量值里的$(除非你特意用${VAR}格式引用变量):

services:
  redmine:
    image: redmine
    environment:
      SMTP_HOST: host.com
      SMTP_USER: user@host.com
      SMTP_PASS: $mypassword

总结下来,优先选方法一,简单不容易出错;遇到特殊字符再考虑方法二就好。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 00:57:38