HttpException:-404运行Docker时无法连接到mac上的远程服务器

时间:2018-03-16 07:14:25

标签: docker docker-compose sparql docker-machine virtuoso

我从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上成功运行。

有人可以帮我解决这个问题吗?另外,欢迎你的建议和想法。谢谢你的帮助和提前的时间。

1 个答案:

答案 0 :(得分:0)

根据我的同事的建议,问题是de docker文件中的代码将docker视为本地主机。 IP地址192.168.99.100也是未知的,因为mac没有它。为了解决连接问题,docker使用自己的网络。docker-compose服务名称用作引用。因此,不应使用http://localhost:8890/sparql,而应使用http://virtuoso:8890/sparql,因为virtuoso是服务名称。

我尝试了这个,它将解决我的问题。