не удалось получить результат json от действия облачной функции IBM через docker java время выполнения - PullRequest
0 голосов
/ 20 февраля 2020

Я пытаюсь запустить Java автономное приложение как docker образ в функции IBM Cloud.

Java Код:

import com.google.gson.JsonObject;

public class Hello {

    public static JsonObject main(JsonObject args) {
        String name = "stranger";
        if (args.has("name"))
            name = args.getAsJsonPrimitive("name").getAsString();
        JsonObject response = new JsonObject();
        response.addProperty("greeting", "Hello, " + name + "!");
        return response;
    }

    public static void main(String...strings) {
        String name = "stranger";
         JsonObject response = new JsonObject();
         if(strings.length > 0)
             name = strings[0];
         response.addProperty("greeting", "Hello, " + name + "!");
         System.out.println(response);
    }
}

POM. xml:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.4.RELEASE</version>
        <relativePath /> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.qs</groupId>
    <artifactId>qs-action</artifactId>
    <version>1.0.0</version>
    <name>java-action</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <!-- https://mvnrepository.com/artifact/com.google.code.gson/gson -->
        <dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
            <version>2.8.5</version>
        </dependency>

    </dependencies>

    <!-- <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> 
        <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> -->
    <build>
        <plugins>
            <plugin>
                <artifactId>maven-assembly-plugin</artifactId>
                <configuration>
                    <archive>
                        <manifest>
                            <mainClass>com.qs.Hello</mainClass>
                        </manifest>
                    </archive>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

Docker Файл:

FROM java:8
#ADD ./target/qs-action-1.0.0.jar /qs-action-1.0.0.jar
ADD ./target/qs-action-1.0.0-jar-with-dependencies.jar /qs-action-1.0.0-jar-with-dependencies.jar
ADD ./run.sh /run.sh
RUN chmod a+x /run.sh
CMD /run.sh

run . sh:

java -jar /qs-action-1.0.0-jar-with-dependencies.jar

Я могу собрать и скомпилировать проект в одном исполняемом фляге. Теперь, после этого, я использую для построения docker образ с помощью команды

docker build -t dockerrepo/imagename:tag .

после построения образа и запуска через docker run imageid, отображается результат java main method. как: {"greeting":"Hello, stranger!"}. После добавления изображения в docker hub я создаю облачную функцию: ibmcloud fn create action jaction - docker docker -repo / image: tag --main com.qs.Hello и, таким образом, создано действие ibm. После этого я пытаюсь вызвать его через пользовательский интерфейс и командную строку, но выдается ошибка.

ok: invoked / _ / jaction, но запрос еще не завершен с идентификатором XXXXXXXX.

Когда я запускаю пользовательский интерфейс облачных действий IBM, ответ основного метода отображается в журнале, но не возвращает никакой строки ответа json.

Может кто-нибудь из вас, пожалуйста, помогите мне Вы должны решить эту проблему.

1 Ответ

0 голосов
/ 27 февраля 2020

Кажется, что вы смешиваете действия Java с действиями Docker. Оба развертываются через CLI, см. Справку по CLI для создания действия для подробных сведений о параметрах .

. При развертывании действия Java необходимо определить метод. имя. Если это изображение Docker, вам необходимо указать приложение или скрипт:

- main ENTRY_METHOD_NAME
Если метод ввода действия не является основным, укажите пользовательское имя. Этот флаг необходим, когда метод ввода не является основным. Для некоторых сред выполнения, например Java, имя должно быть полностью квалифицированным методом.

В предоставленных вами деталях кажется, что вы указали метод, но вам нужно было указать на скрипт пробег. sh.

...