我从docker运行jar文件时获取Error HttpException: -404 Failed to connect to remote server
执行命令docker exec -it Test_docker java -jar TestDocker.jar
。
注意:我在Windows上创建了docker,我的docker机器IP是192.168.99.100并且我的docker exec命令运行成功。我正在使用URL访问Windows上的SPARQL端点:http://192.168.99.100:8890/sparql这将完美地工作。但是当我在mac上使用它时,它会给我一个错误,我在上面提到过。我还尝试将代码上的SPARQL端点更改为http://localhost:8890/sparql但不能正常工作虽然它在mac上的chrome浏览器上工作正常但在执行命令时会给我一个错误。
这是我的docker-compose文件,
version: "3"
services:
jardemo_test:
container_name: Test_docker
image: "java:latest"
working_dir: /usr/src/myapp
volumes:
- /docker/test:/usr/src/myapp
tty: true
depends_on:
- virtuoso
virtuoso:
container_name: virtuoso_docker
image: openlink/virtuoso_opensource
ports:
- "8890:8890"
- "1111:1111"
environment:
DB_USER_NAME: dba
DBA_PASSWORD: dba
DEFAULT_GRAPH: http://localhost:8890/test
volumes:
- /docker/virtuoso-test/:/data
注意:我一直试图在docker-compose文件默认图形URL上设置环境变量,但是它不允许。我已经尝试了下面列出的所有组合。 虽然我收到同样的错误。
下面是我的docker-compose ps
结果
$ docker-compose ps
Name Command State Ports
---------------------------------------------------------------------------------------------------------
Test_docker /bin/bash Up
virtuoso_docker /opt/virtuoso-opensource/b ... Up 0.0.0.0:1111->1111/tcp, 0.0.0.0:8890->8890/tcp
以下是我正在使用的代码,
QueryExecution qexec = QueryExecutionFactory.sparqlService("http://localhost:8890/sparql", queryString);
ResultSet results1 = qexec.execSelect();
信息:运行成功的docker后,我访问了http://localhost:8890/sparql。它将在mac上成功运行。
有人可以帮我解决这个问题吗?另外,欢迎你的建议和想法。谢谢你的帮助和提前的时间。
答案 0 :(得分:0)
根据我的同事的建议,问题是de docker文件中的代码将docker视为本地主机。 IP地址192.168.99.100也是未知的,因为mac没有它。为了解决连接问题,docker使用自己的网络。docker-compose服务名称用作引用。因此,不应使用http://localhost:8890/sparql,而应使用http://virtuoso:8890/sparql,因为virtuoso是服务名称。
我尝试了这个,它将解决我的问题。