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

使用oc rsh访问OpenShift容器时如何将环境变量作为命令参数传递

问题根因
  • 直接通过oc rsh <容器名> <命令>的形式执行命令时,非交互式调用默认不会触发容器内 shell 的变量展开逻辑,你传入的$MONGODB_*变量不会被容器识别解析
  • 如果你在 Linux/macOS 环境下执行命令,本地 shell 会先把$开头的变量替换为本地环境的对应值,本地没有这些变量就会导致传入容器的参数异常(你在 Windows cmd 环境下执行不会有本地解析的问题,所以测试返回的是原始的$MONGODB_PASSWORD字符串)
可行解决方案

方案1(最通用,推荐)

将需要在容器内执行的整段命令作为参数传给sh -c,并用单引号包裹整段命令,完全避免本地 shell 提前解析变量,同时触发容器内的变量解析逻辑。

测试命令验证写法

oc rsh mon-rs-nr-0 sh -c 'echo $MONGODB_PASSWORD'

执行上述命令即可正常返回容器内的密码值。

对应 mongodump 命令写法

oc rsh mon-rs-nr-0 sh -c 'mongodump --host=rs/mon-rs-nr-0.mon-rs-nr.xxx.svc.cluster.local,mon-rs-nr-1.xxx.svc.cluster.local,mon-rs-nr-2.mon-rs-nr.xxx.svc.cluster.local --username=$MONGODB_USER --password=$MONGODB_PASSWORD --authenticationDatabase=$MONGODB_DATABASE'

方案2(适用于命令内包含单引号的场景)

如果你的执行逻辑里本身包含单引号,可以改用双引号包裹命令,同时给所有$符号添加转义符,避免本地 shell 提前解析:

oc rsh mon-rs-nr-0 sh -c "mongodump --host=rs/mon-rs-nr-0.mon-rs-nr.xxx.svc.cluster.local,mon-rs-nr-1.xxx.svc.cluster.local,mon-rs-nr-2.mon-rs-nr.xxx.svc.cluster.local --username=\$MONGODB_USER --password=\$MONGODB_PASSWORD --authenticationDatabase=\$MONGODB_DATABASE"

补充说明

如果容器内置的shell是bash,可以将上述命令中的sh替换为bash,兼容性更好。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 15:21:03