如何从 docker 容器内的 java/spring-boot 项目 运行 python 编写脚本(并接收输出)?
How to run python script (and receive output) from java/spring-boot project which is inside a docker container?
我正在尝试将我的 Ubuntu 16.04 服务器上的服务迁移到 docker 18.09.2(以便我可以利用 kubernetes)。我的问题是让一个 Jar 在 Docker 中以它在我的本地机器和服务器中的工作方式工作。
也就是说,我正在尝试 运行 我的 Java Spring 启动应用程序中的 python 脚本,捕获 Python 的输出,然后显示文本。这在我的本地机器上工作正常,但是当我在 docker 基础图像和 运行 上构建它时,没有任何反应(即从 Buffered Reader 返回空值)
基本 docker 图像是 'openkbs/jre-mvn-py3'。 'HelloWorld.py' 文件位于 Spring 启动项目目录中。
根据 openkbs 的文档 (https://hub.docker.com/r/openkbs/jre-mvn-py3/),我在我的 processString 中尝试了几个不同的命令,但没有任何效果。命令如:
docker 运行 -it --rm openkbs/jdk-mvn-py3 python3 -c 'print("Hello World")'
docker 运行 -i --rm openkbs/jdk-mvn-py3 python3 < HelloWorld.py
下面是我的相关配置和代码行:
Docker文件:
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>");
}
}
Python:
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"]
我正在尝试将我的 Ubuntu 16.04 服务器上的服务迁移到 docker 18.09.2(以便我可以利用 kubernetes)。我的问题是让一个 Jar 在 Docker 中以它在我的本地机器和服务器中的工作方式工作。
也就是说,我正在尝试 运行 我的 Java Spring 启动应用程序中的 python 脚本,捕获 Python 的输出,然后显示文本。这在我的本地机器上工作正常,但是当我在 docker 基础图像和 运行 上构建它时,没有任何反应(即从 Buffered Reader 返回空值)
基本 docker 图像是 'openkbs/jre-mvn-py3'。 'HelloWorld.py' 文件位于 Spring 启动项目目录中。
根据 openkbs 的文档 (https://hub.docker.com/r/openkbs/jre-mvn-py3/),我在我的 processString 中尝试了几个不同的命令,但没有任何效果。命令如:
docker 运行 -it --rm openkbs/jdk-mvn-py3 python3 -c 'print("Hello World")'
docker 运行 -i --rm openkbs/jdk-mvn-py3 python3 < HelloWorld.py
下面是我的相关配置和代码行:
Docker文件:
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>");
}
}
Python:
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"]