首页 > 解决方案 > '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-clishell?我尝试了以下方法,但没有看到任何提示,并且我的所有输入都被忽略了。我什至不能 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似乎按预期工作)。

标签: rediskubectlredis-cli

解决方案


将此作为社区 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连接。


推荐阅读