我有 2 个容器:一个 Redis 容器和一个用于 Golang 应用程序的容器。我的 Golang 应用程序试图通过使用命令 cat ${FILE}| 执行 bash 脚本来执行 Redis Mass Insertion ( https://redis.io/topics/mass-insert ) redis-cli --pipe -h ${HOST}
.
但是redis-cli
在PATH系统变量中没有找到,它不是Golang应用服务内置的shell命令。
因此,我得到一个exit status 127
,这意味着找不到给定的命令。我想知道在 Golang 应用程序服务中如何在没有 redis-cli
命令的情况下执行 bash 脚本。
最佳答案
仅当您重建 go 应用程序镜像并安装 redis cli 工具时,才有可能从应用程序容器内运行该命令。
使用基于 ubuntu 的图像的示例(将其添加到您的 Dockerfile 中):
运行apt更新; apt -y 安装 redis-tools
如果您使用的是 docker compose,则可以使用 docker compose 文件中指定的名称与您的 redis 服务器通信。
cat ${FILE}| redis-cli --pipe -h redis-server
假设您按照本示例中所示命名您的 redis 容器
version: '3'
services:
redis-server:
image: xxx
[...]
或者,如果您想从主机服务器运行命令,您必须确保从 redis 容器转发 redis 端口,然后您可以使用:
docker exec {containerId} 'cat {FILE}' | redis-cli --pipe -h localhost:{REDIS_CONTAINER_PORT}`
关于docker - 在另一个容器 docker 中执行另一个容器命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50066698/