我尝试用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)
答案 0 :(得分:0)
从这段代码我可以看出你想通过你的JAVA程序启动容器,你已经为容器(sparqlhost)分配了一个名称,并且你想用它作为主机名来访问它另外。
但是你的local-host-machine不知道如何解决:sparqlhost服务器名。
由于您已将3030绑定到主机,因此您可以简单地使用主机名称或IP地址进一步处理。