Контейнеры 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, всего за одну.