Выполнить другую команду контейнеров в другом докере контейнеров - PullRequest
0 голосов
/ 27 апреля 2018

У меня есть 2 контейнера: контейнер Redis и контейнер для приложения Golang. Мое приложение Golang пытается выполнить массовую вставку Redis (https://redis.io/topics/mass-insert), выполнив сценарий bash с командой cat ${FILE}| redis-cli --pipe -h ${HOST}.

Однако redis-cli не найден в системной переменной PATH и не является встроенной командой оболочки в службе приложений Golang.

Следовательно, я получаю exit status 127, что означает, что данная команда не найдена. Я хотел бы знать, как я мог бы выполнить скрипт bash без команды redis-cli в службе приложений Golang.

Ответы [ 2 ]

0 голосов
/ 27 апреля 2018

Команду можно запустить из контейнера приложения, только если вы перестроите образ приложения go и установите инструменты redis cli. Пример использования образа на основе Ubuntu (добавьте это в свой Dockerfile): RUN apt update; apt -y install redis-tools Если вы используете docker compose, вы можете общаться с вашим сервером redis, используя имя, указанное в вашем файле docker compose.

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}`
0 голосов
/ 27 апреля 2018

Когда вы создаете образ приложения, убедитесь, что у вас установлены Redis Client и 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"]
...