bash - Bash - 连接到 Docker 容器并在 redis-cli 中执行命令
问题描述
我正在尝试创建一个简单的脚本,它将:
- 连接到 docker 容器的 BASH shell
- 进入redis-cli
flushall
在 redis-cli 中执行命令
到目前为止,我有这个docker_script.sh
(这基本上复制了手动程序):
docker exec -it redis /bin/bash
redis-cli
flushall
但是,当我运行它时,它只连接到容器的 BASH shell,不执行任何其他操作。然后,如果我输入exit
容器的 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
当我手动执行相同的过程时,为什么command not found
if 命令redis-cli
和flushall
存在并且正在容器中工作?如何通过创建这么小的 BASH 脚本来“自动化”它?
谢谢
解决方案
似乎您正在尝试/bin/bash
在 redis 容器中运行,而redis-cli
andflushall
命令在您当前的 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
推荐阅读
- android - 如何从自定义 listAdapter 重置搜索并显示所有数据?
- c# - 使用 XDocument 在特定点添加元素?
- github-actions - 使用 pyspelling 过滤标题字段
- r - 我怎样才能知道我的代码中的哪一行产生了特定的输出?
- python - Tensorflow 2 Keras嵌套模型子类化-总参数为零
- sql - 如何从表1和表2的数据创建表3
- javascript - 如何检测纯JS中的换行符
- java - Is to good to send requests to Service by calling its public functions in Android?
- css - SASS:有没有办法添加一个可选的选择器?
- java - Is it possible to start java jdwp after JVM startup (aka: at runtime) without command line parameters?