Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法通过docker java运行时从ibm云函数操作获取结果json_Java_Docker_Ibm Cloud_Ibm Cloud Functions_Ibm Cloud Tools - Fatal编程技术网

无法通过docker java运行时从ibm云函数操作获取结果json

无法通过docker java运行时从ibm云函数操作获取结果json,java,docker,ibm-cloud,ibm-cloud-functions,ibm-cloud-tools,Java,Docker,Ibm Cloud,Ibm Cloud Functions,Ibm Cloud Tools,我正在尝试在IBMCloud函数中以docker映像的形式运行Java独立应用程序 Java代码: import com.google.gson.JsonObject; public class Hello { public static JsonObject main(JsonObject args) { String name = "stranger"; if (args.has("name")) name = args.g

我正在尝试在IBMCloud函数中以docker映像的形式运行Java独立应用程序

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>
run.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方法。比如:
{“问候语”:“你好,陌生人!”}
。 将图像推送到docker hub后,我正在创建一个云函数: ibmcloud fn创建action jaction--docker docker repo/image:tag--main com.qs.Hello,从而创建了ibm action。在这之后,我试图通过UI和命令行调用它,但错误被抛出

确定:调用了/\u/jaction,但请求尚未完成,id为 XXXXXXXX

当我运行IBMCloudActionUI时,主方法响应显示在日志中,但不返回任何json响应字符串


你们中的任何一个人能帮我解决这个问题吗。

看起来你们把基于Java的操作和基于Docker的操作混为一谈了。两者都是通过CLI部署的

部署Java操作时,需要标识方法名称。如果是Docker映像,则需要指定应用程序或脚本:

--主条目\方法\名称
如果操作的输入方法不是main,请指定自定义名称。输入方法时需要此标志 这不是主要问题。对于某些运行时,例如Java,名称必须是 完全限定方法

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

docker build -t dockerrepo/imagename:tag .