我有2个容器:一个Redis容器和一个Golang应用程序的容器。我的Golang应用程序尝试通过使用命令cat ${FILE}| redis-cli --pipe -h ${HOST}
执行bash脚本来执行Redis Mass Insertion(https://redis.io/topics/mass-insert)。
但是,在PATH系统变量中找不到redis-cli
,并且它不是Golang应用程序服务中的内置shell命令。
因此,我得到一个exit status 127
,这意味着找不到给定的命令。我想知道在Golang应用程序服务中如何在没有redis-cli
命令的情况下执行bash脚本。
答案 0 :(得分:1)
构建应用程序泊坞窗映像时,请确保已安装redis客户端和bash, 根据基本图像,您可以使用apk add bash或apt-get install -y bash。例如,如果您使用的是高山基础图像,则Docker文件可能如下所示:
Dockerfile
FROM golang:1.10.1-alpine3.7
RUN apk add --no-cache ca-certificates bash redis
RUN apk add --update tzdata curl && rm -rf /var/cache/apk/*
ADD myapp /
CMD ["myapp"]
答案 1 :(得分:1)
只有在重建go应用程序映像并安装redis cli工具时,才能从应用程序容器中运行该命令。
使用基于ubuntu的映像的示例(将其添加到Dockerfile):
RUN apt update; apt -y install 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}`