Bash - 连接到 Docker 容器并在 redis-cli 中执行命令
Bash - Connect to Docker container and execute commands in redis-cli
我正在尝试创建一个简单的脚本,它将:
- 连接到 docker 容器的 BASH shell
- 进入redis-cli
- 在 redis-cli 中执行
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-cli
和 flushall
存在并且正在容器中工作?如何通过创建这么小的 BASH 脚本来“自动化”它?
谢谢
似乎您正在尝试 运行 /bin/bash
在 redis 容器内,而 redis-cli
和 flushall
命令在您当前的 [=44] 之后安排=] 实例。尝试像这样将 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
[=11=].
要在评论中回答您的进一步问题,您需要 运行 一个脚本,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
我正在尝试创建一个简单的脚本,它将:
- 连接到 docker 容器的 BASH shell
- 进入redis-cli
- 在 redis-cli 中执行
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-cli
和 flushall
存在并且正在容器中工作?如何通过创建这么小的 BASH 脚本来“自动化”它?
谢谢
似乎您正在尝试 运行 /bin/bash
在 redis 容器内,而 redis-cli
和 flushall
命令在您当前的 [=44] 之后安排=] 实例。尝试像这样将 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
[=11=].
要在评论中回答您的进一步问题,您需要 运行 一个脚本,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