redis - 'kubectl run' redis-cli 直接
问题描述
我想启动一个容器并直接在redis-cli
里面交互运行。出于某种原因,在我的尝试中,输入总是被忽略。
启动交互式 shell,然后手动启动程序可以:
# in my local shell:
$ kubectl run redis-cli --image redis:latest --attach --leave-stdin-open --rm -it --command -- bash
# then in container shell:
root@redis-cli:/data# redis-cli -h redis.example.com
# now the redis-cli shell is open:
redis.example.com:6379>
如何将其组合成一个命令,直接将我带入redis-cli
shell?我尝试了以下方法,但没有看到任何提示,并且我的所有输入都被忽略了。我什至不能 ctrl-C 或 ctrl-D 出来。
kubectl run redis-cli2 --image redis:latest --attach --leave-stdin-open --rm -it --command -- redis-cli -h redis.example.com --stat
# or
kubectl run redis-cli2 --image redis:latest --attach --leave-stdin-open --rm -it --command -- bash -ic -- "redis-cli -h redis.example.com --stat"
如果我执行 a --stat
,我会看到命令输出。如果我执行 a ping
,我会看到 ping 到达 Redis 服务器(使用来自另一个容器),但我从未看到任何输出,并且 pod在终止之前monitor
进入。CrashLoopBackOff
在这一点上,我不确定这种行为是否特定于图像,redis-cli
或者redis
这种行为对于其他交互式程序是否相同(嗯,至少bash
似乎按预期工作)。
解决方案
将此作为社区 wiki 发布,随时编辑和扩展
我找到了一种解决方法,很可能这与redis-cli
容器及其实现有关。用不同的图像观察到相同的行为redis-cli
-docker.io/bitnami/redis:6.2.5-debian-10-r34
运行 question 中的命令时,在创建 pod 后redis-cli
,将显示以下消息:
$ kubectl run redis-cli3 --image redis:latest --attach --leave-stdin-open --env REDIS_PASSWORD=$REDIS_PASSWORD --rm -it -- redis-cli -h redis-master -a $REDIS_PASSWORD
If you don't see a command prompt, try pressing enter.
它应该enter
作为密钥,但它不起作用。
令人惊讶的是shift + r
,组合被接受并显示redis-cli
连接。
推荐阅读
- logstash - Logstash 将服务器日期作为配置变量
- swift - 从灰度矩阵创建 CGImage/UIImage
- asp.net - Web 配置重写规则以在多租户应用程序上强制 http 到 https
- javascript - 检测用户鼠标在浏览器内外的移动
- python - 如何使用网络摄像头解码 Datamatrix?
- c - 如何让函数打印输入值的平方?(数据结构,AVL 树)
- javascript - 滚动浏览彼此堆叠的 div
- javascript - Qt,加载和修改网页
- xamarin - 如何在混合 Webview Xamarin 表单中从 WebApi 加载 Javascript
- c# - 如何在 url 中发送 base64 字符串?