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

我正在尝试将Ubuntu 16.04服务器上的服务迁移到docker 18.09.2(以便我可以利用kubernetes)。我的问题是要让Jar在Docker中工作,就像在本地计算机和服务器中一样。

即,我试图在Java Spring Boot应用程序中运行python脚本,捕获Python的输出,然后显示文本。这在我的本地机器上可以正常工作,但是当我在docker基本映像上构建它并运行它时,什么也没发生(即从Buffered Reader返回null值)

基本的docker映像是'openkbs / jre-mvn-py3'。 “ HelloWorld.py”文件位于SpringBoot项目目录中。

从openkbs的文档(https://hub.docker.com/r/openkbs/jre-mvn-py3/)中获取的信息,我在processString中尝试了一些不同的命令,但是没有任何效果。像这样的命令:

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

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

这是我相关的配置和代码行:

Dockerfile:

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

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>");
        } 
    }

蟒蛇:

print("Hello World")

参考方案

您没有将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"]

Spring MVC中的输入验证 - java

我知道Commons Validator框架是Struts项目在服务器端和客户端验证输入值的事实上的标准。Spring MVC项目是否也是如此?我得到的印象可能不是,大多数Struts书籍和论坛都谈论Commons Validator框架,但是只有少数Spring书籍和论坛可以。在Spring MVC项目中验证输入的最佳实践是什么?干杯! 参考方案 在引入S…

Java:“自动装配”继承与依赖注入 - java

Improve this question 我通常以常见的简单形式使用Spring框架: 控制器服务存储库通常,我会在CommonService类中放一个通用服务,并使所有其他服务扩展到类中。一个开发人员告诉我,最好在每个服务中插入CommonClass而不是使用继承。我的问题是,有一个方法比另一个更好吗? JVM或性能是否会受到另一个影响?更新资料Comm…

Spring MVC Web应用程序检测暴力攻击的最佳方法? - java

Spring 3.0 MVC中是否有专门用于帮助检测Web应用程序的身份验证/登录页面上的蛮力攻击的功能? 参考方案 经过长期验证的实践是,如果身份验证失败,则会引入随机但相当大的延迟。这样,合法用户将立即登录,但攻击者每次尝试将花费500ms-1s,这使整个暴力概念不切实际(将永远存在)。合法用户偶尔失败的登录只会使他们稍有延迟,并且不会引起注意。如果需要…

Spring Data Cassandra的事务管理 - java

我正在使用Spring和Cassandra作为基础数据库。曾提到过弹簧伞项目“ spring data cassandra”。与休眠不同,在这里无法找到如何管理事务。如果您中的某些人已经合并,请共享要包含的事务管理器的详细信息。 参考方案 Cassandra不支持传统(ACID)的事务。在某些特殊情况下,可以通过一些构造来实现事务原子性,例如原子批处理(请参…

Spring Boot:java.time.Duration的默认序列化从字符串更改为数字 - java

我们最近从Spring Boot 2.1.9升级到2.2.1,这导致我们的测试失败。调查导致结果,默认情况下java.time.Duration类型现在序列化为不同的序列。现在,我们将得到"PT15M",而不是在JSON消息中包含字符串"900.0"。 POJO定义如下所示@JsonProperty(required …