Выполнить команду из одного контейнера в другой - PullRequest
3 голосов
/ 23 марта 2019

У меня есть два dockerized проекта: один с использованием NodeJS, а другой с использованием Python

Я хочу запустить выполнение скрипта Python (на контейнере с приложением Python) из приложения NodeJS.

В основном приложение NodeJS будет запускать что-то вроде exec('python3 script.py'), но ожидается, что оно будет запущено в контейнере приложения Python.

Как мне добиться такого точного поведения? Заранее спасибо!

1 Ответ

3 голосов
/ 23 марта 2019

Контейнеры Docker являются реализацией архитектуры микро-услуг. Таким образом, ожидается, что они будут достаточно разделены и будут взаимодействовать между собой с помощью TCP (обычно HTTP). Таким образом, ваш контейнер Python должен предоставлять некоторый вызов REST (например).

Есть способ обойти это, но это не рекомендуется, так как он открывает ваш демон docker любому, кто работает внутри контейнера nodejs. Я перечисляю это здесь, так как это может быть полезно во время разработки.

1 - установить Docker CLI
В свой Dockerfile nodejs добавьте следующие строки:

ENV DOCKER_VERSION=18.09.4
RUN curl -sfL -o docker.tgz "https://download.docker.com/linux/static/stable/x86_64/docker-${DOCKER_VERSION}.tgz" && \
  tar -xzf docker.tgz docker/docker --strip=1 --directory /usr/local/bin && \
  rm docker.tgz

Это устанавливает только минимальную часть CLI полной загрузки докера.

2 - закрепите разъем док-станции.
В ваш файл композиции добавьте следующее:

services:
  mypython:
    container_name: mypython
    ...
  mynodejs:
    ...
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock 

3 - Вызовите ваш скрипт на python.
Из внутри вашего контейнера nodejs вы можете теперь использовать интерфейс командной строки Docker.

# Log into your nodejs container first
docker exec -it mynodejs sh
# and execute some command in another container
docker exec mypython python3 script.py

Вышеуказанный самый простой способ сделать это. Вы также можете избежать установки интерфейса командной строки Docker и напрямую использовать Docker API , но обычно требуется написать несколько строк для того, что делает интерфейс командной строки Docker, всего за одну.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...