简体   繁体   English

如何从docker容器内的java / spring-boot项目运行python脚本(并接收输出)?

[英]How to run python script (and receive output) from java/spring-boot project which is inside a docker container?

I am trying to migrate services on my Ubuntu 16.04 server to docker 18.09.2 (so that I can leverage kubernetes). 我正在尝试将Ubuntu 16.04服务器上的服务迁移到docker 18.09.2(以便我可以利用kubernetes)。 My problem is getting a Jar to work in Docker the way it works in my local machine and server. 我的问题是要让Jar在Docker中工作,就像在本地计算机和服务器中一样。

Namely, I am trying to run a python script inside of my Java Spring Boot Application, capture the output of the Python, and then display the text. 即,我试图在Java Spring Boot应用程序内部运行python脚本,捕获Python的输出,然后显示文本。 This works fine on my local machine , but when I build it on the docker base image and run it, nothing happens (ie null value is returned from Buffered Reader) 这在我的本地计算机上工作正常,但是当我在docker基本映像上构建它并运行它时,什么也没发生(即,从Buffered Reader返回的空值)

The base docker image is 'openkbs/jre-mvn-py3'. 基本的docker映像是'openkbs / jre-mvn-py3'。 The 'HelloWorld.py' file is located in the SpringBoot project directory. “ HelloWorld.py”文件位于SpringBoot项目目录中。

Taking from openkbs's documentation ( https://hub.docker.com/r/openkbs/jre-mvn-py3/ ), I have tried a few different command's in my processString, but nothing is working. 从openkbs的文档( https://hub.docker.com/r/openkbs/jre-mvn-py3/ )中获取,我在processString中尝试了一些不同的命令,但没有任何效果。 Commands like: 像这样的命令:

docker run -it --rm openkbs/jdk-mvn-py3 python3 -c 'print("Hello World")' docker run -it --rm openkbs / jdk-mvn-py3 python3 -c'print(“ Hello World”)'

docker run -i --rm openkbs/jdk-mvn-py3 python3 < HelloWorld.py 泊坞窗运行-i --rm openkbs / jdk-mvn-py3 python3 <HelloWorld.py

Here are my relevant configurations and lines of code: 这是我相关的配置和代码行:

Dockerfile: Dockerfile:

FROM openkbs/jdk-mvn-py3
ADD target/dockerMaster.jar dockerMaster.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "dockerMaster.jar"]

Java: Java的:

    @RequestMapping("/pytest")
    public String pytest() {
        Runtime rt = Runtime.getRuntime();
        String processString = "python3 HelloWorld.py";
        System.out.println(processString);

        try {
            Process extractProcess = rt.exec(processString);
            BufferedReader input = new BufferedReader(new InputStreamReader(extractProcess.getInputStream()));
            String pyString = input.readLine();
            return new String("<PYSTUFF>SUCCESS " + pyString + "</PYSTUFF>");
        } catch (IOException e) {
            e.printStackTrace();
            return new String("<FAIL>PYTHON DID NOT RUN</FAIL>");
        } 
    }

Python: 蟒蛇:

print("Hello World")

you are not putting your HelloWorld.py file into the container that is why its not working what you need to do is add HelloWorld.py into the container and also make sure python is installed inside the container. 您没有将HelloWorld.py文件放入容器中,这就是为什么它不起作用的原因是将HelloWorld.py添加到容器中,并确保在容器内安装了python。

FROM openkbs/jdk-mvn-py3
ADD target/dockerMaster.jar dockerMaster.jar
ADD target/HelloWorld.py HelloWorld.py
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "dockerMaster.jar"]

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM