我有两个容器:一个Redis容器和一个Golang应用程序的容器。我的Golang应用程序正在尝试通过使用命令https://redis.io/topics/mass-insert执行bash脚本来执行RedisMass插入( cat ${FILE}| redis-cli --pipe -h ${HOST} )。
但是,在PATH系统变量中找不到redis-cli,它也不是Golang应用程序服务中内置的shell命令。
因此,我得到了一个exit status 127,这意味着给定的命令没有找到。我想知道如何能够在Golang应用程序服务中不使用redis-cli命令执行bash脚本。
发布于 2018-04-27 17:39:19
只有在重新生成go应用程序映像并安装redis cli工具时,才有可能从应用程序容器中运行该命令。示例使用一个基于ubuntu的映像(将其添加到您的Dockerfile中):RUN apt update; apt -y install redis-tools (如果您使用的是对接者撰写),您可以使用您的Dockerfile文件中指定的名称与您的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}`发布于 2018-04-27 17:09:49
当您构建应用程序停靠程序映像时,请确保安装了redis客户端和bash,取决于基本映像,您可以使用add或apt安装-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"]https://stackoverflow.com/questions/50066698
复制相似问题