Bash -连接到Docker容器并在redis-cli中执行命令

wribegjk  于 2022-11-21  发布在  Redis
关注(0)|答案(2)|浏览(201)

我正在尝试创建一个简单的脚本,它将:
1.连接到Docker容器的BASH shell
1.进入重建
1.在redis-cli中执行flushall命令
到目前为止,我在我的docker_script.sh中有这个(这基本上复制了手动过程):

docker exec -it redis /bin/bash
redis-cli
flushall

然而,当我运行它时,它只连接到容器的BASH shell,不做任何其他事情。

root@5ce358657ee4:/data# exit
exit
./docker_script.sh: line 2: redis-cli: command not found
./docker_script.sh: line 3: keys: command not found

如果命令redis-cliflushall存在并且在容器中工作,当我手动执行相同的过程时,为什么是command not found?我如何通过创建这样一个小的BASH脚本来“自动化”它?
谢谢你

n53p2ov0

n53p2ov01#

看起来您试图在redis容器中运行/bin/bash,而redis-cliflushall命令在当前shell示例中被调度在后面。尝试传入redis-cli命令进行bash,如下所示:

docker exec -it redis /bin/bash -c "redis-cli FLUSHALL"

-c用于告诉bash从字符串中读取命令。
摘录自man页面:

-c string If the -c option is present, then commands are read from
                 string.   If  there are arguments after the string, they
                 are assigned to the positional parameters, starting with
                 $0.

为了回答注解中的进一步问题,您需要运行一个脚本redis_flushall.sh来运行该命令。该文件的内容是:

docker exec -it redis /bin/bash -c redis-cli auth MyRedisPass; flushall

分解一下,你调用redis-cli auth MyRedisPass作为一个bash命令,flushall作为另一个bash命令。问题是,flushall不是一个有效的命令,你需要调用redis-cli flushall instead。命令链是一个必须在CLI应用程序中故意实现的东西,而不是一个福尔斯的东西。
如果您将脚本的内容替换为以下内容,它应该可以工作,即在;之后添加一个redis-cli调用,然后指定flushall命令。

docker exec -it redis /bin/bash -c redis-cli auth MYSTRONGPASSWORD; redis-cli FLUSHALL
r8xiu3jd

r8xiu3jd2#

上面 提出 的 使用 auth 的 解决 方案 仍然 出现 错误
x1月 1 日
这 对 我 很 有效 :

docker exec -it redis /bin/sh -c 'redis-cli -a MYPASSWORD FLUSHALL'

中 的 每 一 个

相关问题