我在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%可复制的。那是什么伏都教魔法?
答案 0 :(得分:2)
首先,一个容器可以是一个多命令容器,它在创建后创建了在容器内运行 CLI 的选项。
如果您想启动 CLI,您需要了解如何进入容器并执行第二个命令。您需要在容器内启动第二个程序。
要在容器中运行redis-cli,需要使用另一个docker命令-
exec 是 execute 的缩写,我们用它来执行容器内的附加命令,所以记下 docker exec 然后记下 dash IT。
-it 参数允许我们直接在容器中输入输入,然后我们提供容器 ID 和我们想要在容器内执行的命令。
sudo docker exec -it container_id redis-cli
如果你不使用-it,你会被直接踢回来,因为redis CLI已经启动但是你没有输入任何文本的能力。
答案 1 :(得分:0)
以分离模式运行redis容器:
docker run -d redis
在其上运行redis-cli
:
docker exec -it e0c061a5700bfa400f8f24b redis-cli
其中e0c061a5700bfa400f8f24b
是容器的ID。
根据文档:
要以分离模式启动容器,请使用-d = true或仅使用-d选项。按照设计,除非用于运行容器的根进程退出,否则以分离模式启动的容器将退出,除非您还指定了--rm选项。如果将-d与--rm一起使用,则在容器退出或守护程序退出时(以先发生的为准)将删除该容器。
。
-interactive,-i即使未连接STDIN仍保持打开状态
-tty,-t分配伪TTY
答案 2 :(得分:0)
docker run --name redis -p 6379:6379 -d redis
docker exec -it redis redis-cli