从一个容器向另一个容器运行命令

时间:2019-03-23 18:44:54

标签: python node.js python-3.x docker docker-compose

我有两个Docker化项目:一个使用NodeJS,另一个使用Python

我想从NodeJS应用程序触发Python脚本执行(在带有Python应用程序的容器上)。

基本上,NodeJS应用程序将运行类似exec('python3 script.py')的程序,但预计它将在Python应用程序容器上运行。

如何实现此确切行为?预先感谢!

1 个答案:

答案 0 :(得分:3)

Docker容器是微服务架构的实现。因此,它们应该被完全解耦并使用TCP(通常是HTTP)在它们之间进行通信。因此,您的python容器应公开一些REST调用(例如)。

有一种解决方法,但是不建议这样做,因为它可以将docker守护程序向在nodejs容器中运行的任何人开放。我将其列出在这里,因为它在开发过程中很有用。

1-安装Docker CLI
在您的nodejs Dockerfile中,添加以下行:

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

这仅安装了完整docker下载中的最低限度的CLI部分。

2-绑定安装Docker套接字。
在撰写文件中,添加以下内容:

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

3-调用您的python脚本。
现在,您可以从nodejs容器的 inside 中使用docker CLI。

# 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 CLI,而直接使用Docker API,但是通常它需要您为Docker CLI的一行编写多行。