#redis #kubectl #redis-cli
Вопрос:
Я хочу запустить контейнер и напрямую redis-cli
интерактивно запустить его внутрь. По какой-то причине в моих попытках входные данные всегда игнорируются.
Запуск интерактивной оболочки, а затем запуск программы вручную работает:
# 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"
Если я выполню a --stat
, я увижу вывод команды. Если я выполняю a ping
, я вижу, что сигнал поступает на сервер Redis (используя monitor
другой контейнер), но я никогда не вижу никаких выходных данных, и модуль CrashLoopBackOff
запускается перед завершением.
На данный момент я не уверен, является ли это поведение специфичным для redis-cli
изображения или redis
для изображения, или это поведение одинаково для других интерактивных программ (ну, по крайней bash
мере, кажется, что оно работает так, как ожидалось).
Комментарии:
1. Какой образ/развертывание используется для самого redis? Чтобы иметь минимальный воспроизводимый пример.
2. В моем случае это экземпляр AWS ElastiCache, но я не ожидаю, что это будет иметь значение. Запуск сервера Redis в том же кластере k8s, вероятно, является более простым способом воспроизвести ситуацию.
3. Ну, я видел, что ты сказал , я попытался добавить уровень многословия к максимальному
--v=9
, бод запланирован и ждет чего-то другого. Кроме того, если вы нажмете 31 раз на любую клавишу, он покажет вам приглашение. То же самое происходит с другим изображением с.redis-cli
Не знаю почему.4. Кстати, какая версия
kubectl
кластера and используется? У него может быть другое поведение
Ответ №1:
Разместив это как вики-страницу сообщества, не стесняйтесь редактировать и расширять
Я нашел обходной путь, скорее всего, это связано с redis-cli
контейнером и его реализацией. То же самое поведение наблюдается при различном изображении redis-cli
— docker.io/bitnami/redis:6.2.5-debian-10-r34
Когда выполняется команда из вопроса, после создания модуля 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
связь.
Комментарии:
1. Может подтвердить,
shift r
выводит запрос. Можете ли вы объяснить, почему это работает?2. @BalzGuenat, К сожалению, я не знаю, по этой причине я сделал этот обходной путь в качестве вики-сообщества в надежде, что кто-то действительно сможет добавить это в мой ответ или добавить свой. Однако я думаю, что это следует адресовать
redis-cli
разработчикам приложений, чтобы они могли отслеживать, что, где и почему.