我想启动一个容器,并在里面直接交互地运行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外壳?我尝试了以下方法,但没有看到任何提示,并且我的所有输入都被忽略。我甚至不能按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"如果我执行--stat,我会看到命令输出。如果我执行ping,我看到ping到达Redis服务器(使用来自另一个容器的monitor ),但我没有看到任何输出,pod在终止之前进入CrashLoopBackOff。
在这一点上,我不确定这种行为是否特定于redis-cli或redis图像,或者这种行为是否适用于其他交互式程序(好吧,至少bash看起来像预期的那样工作)。
发布于 2021-09-03 12:04:45
将此作为社区维基发布,请随时编辑和扩展
我找到了一个解决方法,这很可能与redis-cli容器及其实现有关。用不同图像redis-cli - docker.io/bitnami/redis:6.2.5-debian-10-r34观察到相同的行为
运行pod中的命令,创建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已连接。
https://stackoverflow.com/questions/68956906
复制相似问题