在Docker容器中访问Redis CLI

And*_*Gis 3 redis docker

我让Redis在docker容器中运行。

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>
Run Code Online (Sandbox Code Playgroud)

如果我运行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>
Run Code Online (Sandbox Code Playgroud)

我的操作系统是Windows 10。

有什么办法可以解决问题docker exec -it my_redis redis-cli

更新

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

Far*_* AK 24

  1. 在 6379 端口以分离模式运行名为 redis 的 redis 容器。

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

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

docker exec -it redis redis-cli


Lor*_*ord 10

首先,容器可以是多命令容器,它创建在创建容器后在容器内运行 CLI 的选项。 在此输入图像描述

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

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

在此输入图像描述

exec是execute 的缩写,我们使用它在容器内执行附加命令,因此写下 docker exec 然后写下 dash IT。

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

sudo docker exec -it container_id redis-cli

在此输入图像描述

如果你不使用-it,你会被直接踢回来,因为 redis CLI 已启动,但你无法输入任何文本。


Ort*_*kni 6

在分离模式下运行redis容器:

docker run -d redis
Run Code Online (Sandbox Code Playgroud)

运行redis-cli它:

docker exec -it e0c061a5700bfa400f8f24b redis-cli
Run Code Online (Sandbox Code Playgroud)

e0c061a5700bfa400f8f24b容器的ID 在哪里。

根据文档:

分离(-d)

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

--interactive,-i即使未连接也保持STDIN打开

--tty,-t分配伪TTY