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



我想创建一个简单的脚本,它将:

  1. 连接docker容器的BASH shell
  2. 进入redis-cli
  3. 在redis-cli
  4. 中执行flushall命令

到目前为止,我在我的docker_script.sh中有这个(这基本上复制了手动过程):

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

但是,当我运行它时,它只连接到容器的BASH shell,而不做任何其他事情。然后,如果我在容器的BASH shell中输入exit,它会输出如下内容:

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

为什么command not found如果命令redis-cliflushall存在并且当我手动执行相同的过程时正在容器中工作?我如何"自动化"?通过创建这么小的BASH脚本来实现吗?

谢谢

似乎你正试图在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

上面提出的auth解决方案仍然给我一个错误

(error) NOAUTH Authentication required

这个为我工作:

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

相关内容

  • 没有找到相关文章

最新更新