在Docker容器中访问Redis CLI

时间:2019-01-15 19:33:19

标签: docker redis

我在docker container内部运行Redis。

docker run --rm -d --name "my_redis" redis

我想通过CLI访问它:

如果我运行docker exec -it my_redis redis-cli,直到离开容器(Ctrl + P,Ctrl + Q)之前,控制台将无响应

C:\Users\Andrzej>docker exec -it my_redis redis-cli
// nothing here until I go Ctrl + P, Ctrl + Q
exec attach failed: error on attach stdin: read escape sequence
C:\Users\Andrzej>

如果我运行docker exec -it my_redis sh,然后从容器内部运行redis-cli,则它起作用。

C:\Users\Andrzej>docker exec -it my_redis sh
# redis-cli
127.0.0.1:6379> set hello world
OK
127.0.0.1:6379> get hello
"world"
127.0.0.1:6379>

我的操作系统是Windows 10。

有什么方法可以解决docker exec -it my_redis redis-cli的行为吗?

更新

当控制台无响应时,我刚好11次单击“向上箭头”键,即可看到Redis cli。这是100%可复制的。那是什么伏都教魔法?

3 个答案:

答案 0 :(得分:2)

首先,一个容器可以是一个多命令容器,它在创建后创建了在容器内运行 CLI 的选项。 enter image description here

如果您想启动 CLI,您需要了解如何进入容器并执行第二个命令。您需要在容器内启动第二个程序。

要在容器中运行redis-cli,需要使用另一个docker命令-

enter image description here

exec 是 execute 的缩写,我们用它来执行容器内的附加命令,所以记下 docker exec 然后记下 dash IT。

-it 参数允许我们直接在容器中输入输入,然后我们提供容器 ID 和我们想要在容器内执行的命令。

sudo docker exec -it container_id redis-cli

enter image description here

如果你不使用-it,你会被直接踢回来,因为redis CLI已经启动但是你没有输入任何文本的能力。

答案 1 :(得分:0)

以分离模式运行redis容器:

docker run -d redis

在其上运行redis-cli

docker exec -it e0c061a5700bfa400f8f24b redis-cli

其中e0c061a5700bfa400f8f24b是容器的ID。

根据文档:

  

Detached (-d)

     

要以分离模式启动容器,请使用-d = true或仅使用-d选项。按照设计,除非用于运行容器的根进程退出,否则以分离模式启动的容器将退出,除非您还指定了--rm选项。如果将-d与--rm一起使用,则在容器退出或守护程序退出时(以先发生的为准)将删除该容器。

  

-interactive,-i即使未连接STDIN仍保持打开状态

     

-tty,-t分配伪TTY

答案 2 :(得分:0)

  1. 在 6379 端口运行 redis 容器,名称为 redis in detached 模式。

docker run --name redis -p 6379:6379 -d redis

  1. 在容器中运行 redis-cli 命令。

docker exec -it redis redis-cli