Docker容器以java中的comandline开头

时间:2018-04-30 12:46:40

标签: java docker sparql jena

我尝试用jena启动一个docker容器,但我得到一个UnknownHostException

我的代码:

        String sparqlHostDockerExecCmd = "docker run --name sparqlhost -p 3030:3030 -e ADMIN_PASSWORD=pw123 -e JVM_ARGS=-Xmx2g -d stain/jena-fuseki";
        Process p = Runtime.getRuntime().exec(sparqlHostDockerExecCmd);
        BufferedReader stdInput = new BufferedReader(new
            InputStreamReader(p.getInputStream()));

        String sparqlDatasetURI = "http://sparqlhost:3030/UnitTestSet/update";
        testSink = new SparqlBasedSink(updateDatasetURI, queryDatasetURI);

        int retryCount = 0;
        while (true) {
            try {                      
                testSink.sendSomeUpdateRequestToJena();                    
                break;
            } catch (Exception error) {
                System.out.println("Could not connect, retrying");
                retryCount++;
                if (retryCount > 10) break;
                Thread.sleep(5000);
            }
        }

我在第

行获得了UnknownHostException
UpdateRequest request = UpdateFactory.create(sampleQuery);
UpdateProcessor proc = UpdateExecutionFactory.createRemote(request, updateDatasetURI);
proc.execute();

sampleQuery是正确的,我在第3行得到了错误。

错误消息:

    org.apache.jena.atlas.web.HttpException: java.net.UnknownHostException: sparqlhost

    at org.apache.jena.riot.web.HttpOp.exec(HttpOp.java:1202)
    at org.apache.jena.riot.web.HttpOp.execHttpPost(HttpOp.java:803)
    at org.apache.jena.riot.web.HttpOp.execHttpPost(HttpOp.java:578)
    at org.apache.jena.riot.web.HttpOp.execHttpPost(HttpOp.java:534)
    at org.apache.jena.sparql.modify.UpdateProcessRemote.execute(UpdateProcessRemote.java:79)
    at org.aksw.simba.squirrel.sink.impl.sparql.SparqlBasedSink.sendAllTriplesToDB(SparqlBasedSink.java:83)
    at org.aksw.simba.squirrel.sink.impl.sparql.SparqlBasedSink.closeSinkForUri(SparqlBasedSink.java:70)
    at org.aksw.simba.squirrel.sink.impl.sparql.SparqlBasedSinkTest.openOpen(SparqlBasedSinkTest.java:94)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

1 个答案:

答案 0 :(得分:0)

从这段代码我可以看出你想通过你的JAVA程序启动容器,你已经为容器(sparqlhost)分配了一个名称,并且你想用它作为主机名来访问它另外。
但是你的local-host-machine不知道如何解决:sparqlhost服务器名。

由于您已将3030绑定到主机,因此您可以简单地使用主机名称或IP地址进一步处理。