docker - 在另一个容器 docker 中执行另一个容器命令

标签 docker go redis docker-compose

我有 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/

相关文章:

docker - Docker:仅在重启时重启容器?

docker - 如何调试为什么Telegraf不将数据从MQTT发送到influxdb

docker - Kubelet 无法获取 "/system.slice/docker.service"的 cgroup 统计信息

django - 为什么docker容器中的Django不起作用?

go - 使用 RSA/PEM 文件解密测试消息时出错

go - 为 big.Int 创建了类型别名 - 但我无法使用其指针接收器设置它?

json - 在 JSON get 请求中设置 header

redis - 如果 master 在给定时间内关闭,则杀死 Redis Slave

memory - Redis中如何确定单个key的大小

javascript - 使用 NODE JS 和 BLUEBIRD 从 REDIS 中获取数据