我有两个Docker化项目:一个使用NodeJS,另一个使用Python
我想从NodeJS应用程序触发Python脚本执行(在带有Python应用程序的容器上)。
基本上,NodeJS应用程序将运行类似exec('python3 script.py')
的程序,但预计它将在Python应用程序容器上运行。
如何实现此确切行为?预先感谢!
答案 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的一行编写多行。