kubectl exec执行curl命令连接localhost:7750被拒问题求助
问题解决:kubectl exec 执行带命令替换的curl失败
原因分析
你遇到的问题核心是命令替换的解析时机:当用双引号包裹bash -c的参数时,本地终端的shell会先解析$(curl ...)部分——也就是在你自己的机器上尝试访问localhost:7750(而非容器内部的localhost),你的本地机器没在7750端口提供服务,所以出现连接拒绝。
而交互式进入容器后执行命令时,所有代码都是在容器内部的shell中解析执行,自然能正常访问容器内的服务。
解决方案
有两种方式可以避免本地shell提前解析命令替换:
方式一:使用单引号包裹命令
单引号会阻止本地shell解析内部的特殊字符,让整个命令原封不动传给容器内的bash执行:
kubectl exec -t pulsar-pulsar-manager-79c6769595-xd596 -- bash -c 'CSRF_TOKEN=$(curl -v http://localhost:7750/pulsar-manager/csrf-token)'
方式二:转义$符号
在命令替换的$前加反斜杠,让本地shell忽略它的特殊含义,保留到容器内解析:
kubectl exec -t pulsar-pulsar-manager-79c6769595-xd596 -- bash -c "CSRF_TOKEN=\$(curl -v http://localhost:7750/pulsar-manager/csrf-token)"
内容的提问来源于stack exchange,提问作者Niahm
相关产品推荐
相关产品推荐

