Docker контейнер начинается с командной строки в Java - PullRequest
0 голосов
/ 30 апреля 2018

Я пытаюсь запустить докер-контейнер с Дженой, но я получаю 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 голосов
/ 30 апреля 2018

Из фрагмента кода я могу выяснить, что вы хотите запустить контейнер через JAVA-программу и
вы присвоили имя контейнеру (sparqlhost) и хотите использовать его в качестве имени хоста для доступа к нему далее.
Однако ваш локальный хост-компьютер не знает, как решить: имя сервера sparqlhost.

Поскольку вы уже связали 3030 с хост-машиной, вы можете просто использовать имя или IP-адрес хост-машины для дальнейшей обработки.

...