Как запустить скрипт Python (и получить выходные данные) из проекта java / spring-boot, который находится внутри контейнера Docker? - PullRequest
0 голосов
/ 27 апреля 2019

Я пытаюсь перенести сервисы на моем сервере Ubuntu 16.04 в докер 18.09.2 (чтобы я мог использовать kubernetes). Моя проблема - заставить Jar работать в Docker так, как он работает на моем локальном компьютере и сервере.

А именно, я пытаюсь запустить скрипт python внутри моего Java Spring Boot Application, захватить вывод Python, а затем отобразить текст. Это хорошо работает на моем локальном компьютере, но когда я создаю его на базовом образе докера и запускаю его, ничего не происходит (то есть нулевое значение возвращается из Buffered Reader)

Базовый образ докера '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")'

docker run -i --rm openkbs / jdk-mvn-py3 python3

Вот мои соответствующие конфигурации и строки кода:

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

Python:

print("Hello World")

1 Ответ

1 голос
/ 27 апреля 2019

вы не помещаете свой файл 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"]
...