【问题标题】:not able to get result json from ibm cloud function action through docker java run time无法通过 docker java 运行时从 ibm 云函数操作获取结果 json
【发布时间】:2020-06-04 23:24:30
【问题描述】:

我正在尝试在 IBM Cloud 函数中将 Java 独立应用程序作为 docker 映像运行。

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

运行.sh:

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

我能够在单个可执行 jar 中构建和编译项目。现在,在此之后,我使用通过命令构建 docker 映像

docker build -t dockerrepo/imagename:tag .

构建镜像并通过docker run imageid运行后,java main方法的结果显示。喜欢:{"greeting":"Hello, stranger!"}。 将图像推送到 docker hub 后,我正在创建一个云功能: ibmcloud fn create action jaction --docker docker-repo/image:tag --main com.qs.Hello 从而创建了 ibm 操作。在此之后,我也尝试通过 UI 和命令行调用它,但抛出错误。

ok: 调用了/_/jaction,但是请求还没有完成,带有id XXXXXXX。

当我通过 IBM 云操作 UI 运行时,主方法响应显示在日志中,但不返回任何 json 响应字符串。

请任何人帮我解决这个问题。

【问题讨论】:

    标签: java docker ibm-cloud ibm-cloud-functions ibm-cloud-tools


    【解决方案1】:

    您似乎将基于 Java 的操作与基于 Docker 的操作混合在一起。两者都通过 CLI 部署,see the CLI reference for creating an action for the details on options

    当您部署 Java 操作时,您需要确定方法名称。当是 Docker 镜像时,需要指定应用程序或脚本:

    --main ENTRY_METHOD_NAME
    如果操作的入口方法不是 main,则指定自定义名称。进入方法时需要这个标志 不是主要的。对于某些运行时,例如 Java,名称必须是 完全合格的方法。

    在您提供的详细信息中,您似乎指定了方法,但需要指向脚本 run.sh

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-26
      • 2017-06-27
      • 2021-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多