Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何向运行在docker容器中的服务器发送HTTP请求?_Java_Http_Docker_Webserver - Fatal编程技术网

Java 如何向运行在docker容器中的服务器发送HTTP请求?

Java 如何向运行在docker容器中的服务器发送HTTP请求?,java,http,docker,webserver,Java,Http,Docker,Webserver,我已经建立了一个java应用程序,它充当web服务器并处理http请求。我已经测试过它在容器外工作(确实如此),但是当在容器中时,我的请求似乎无法到达它 服务器侦听端口3971,Dockerfile如下所示: FROM java:8 ADD VaultServer / EXPOSE 3971 EXPOSE 3972 ENTRYPOINT ["java", "-jar", "VaultServer.jar"] 调用根地址应该会返回一些东西(通常我会发送一个GET to) 我尝试用docker机器

我已经建立了一个java应用程序,它充当web服务器并处理http请求。我已经测试过它在容器外工作(确实如此),但是当在容器中时,我的请求似乎无法到达它

服务器侦听端口3971,Dockerfile如下所示:

FROM java:8
ADD VaultServer /
EXPOSE 3971
EXPOSE 3972
ENTRYPOINT ["java", "-jar", "VaultServer.jar"]
调用根地址应该会返回一些东西(通常我会发送一个GET to)


我尝试用docker机器的ip地址替换“localhost”,也用我在检查服务器的运行容器时得到的ip地址替换,但两个都并没有响应。当我调用docker机器的ip地址时,我得到错误连接被拒绝。是否需要启用其他功能?

您正在执行EXPOSE 3972,它将端口暴露给其他链接的容器,但不暴露给主机

要向主机公开端口,请执行以下操作

docker run -p 3972:3972 ....... etc
你也可以做

docker run -P
它将通过EXPOSE向主机公开所有端口(这不是默认值-您必须在此处使用-p标志)

使用“操作=”http://192.168.99.100:8080/rest/data/ingest在html中引用Docker容器的Rest路径。请参阅底部html代码第4行

细分:

1) 192.168.99.100:8080=码头工人的IP地址和端口#

2) /rest/=在web.xml文件中

3) data/=@Path(“/data”)

4) /ingest=@Path(“/ingest”)

HTML代码:

<html>
    <body>
        <h1>Data Ingest: Web Uploader</h1>     
        <form action="http://192.168.99.100:8080/rest/data/ingest" method="post" enctype="multipart/form-data">

           <p>Select files
: <input type="file" name="file" size="10000000" multiple/> </p>
            <input type="submit" value="Upload Files"/>
        </form>
    </body>
</html>

我可以向你们展示我是如何用其他容器(MSSQL和Elasticsearch)编写dotnet核心项目的,也许这会对你们有所帮助

要为另一个容器添加依赖项,请执行以下操作:

services:

  prime.web:
    image: prime.web
    build:
      context: ./Prime.Web
      dockerfile: Dockerfile
    links:
      - sql.data
      - elasticsearch

  sql.data:
    image: microsoft/mssql-server-linux  

  elasticsearch:
    image: elasticsearch
services:  

  prime.web:
    environment:
      - 'ConnectionStrings:primekinetics=Server=tcp:sql.data,1433;InitialCatalog=prime;User ID=sa;Password=Pass@word;Connection Timeout=30;'      
      - 'ElasticSearchConnection=http://elasticsearch:9200/'
      - ASPNETCORE_ENVIRONMENT=Development      
    ports:
      - "5105:80"

  sql.data:
    environment:      
      - SA_PASSWORD=Pass@word
      - ACCEPT_EULA=Y
    ports:
      - "5433:1433"

  elasticsearch:    
    ports:
      - "9200:9200"
并在docker-compose.override.yml中写入,您将在其中重写appsetting文件,并可以访问另一个容器:

services:

  prime.web:
    image: prime.web
    build:
      context: ./Prime.Web
      dockerfile: Dockerfile
    links:
      - sql.data
      - elasticsearch

  sql.data:
    image: microsoft/mssql-server-linux  

  elasticsearch:
    image: elasticsearch
services:  

  prime.web:
    environment:
      - 'ConnectionStrings:primekinetics=Server=tcp:sql.data,1433;InitialCatalog=prime;User ID=sa;Password=Pass@word;Connection Timeout=30;'      
      - 'ElasticSearchConnection=http://elasticsearch:9200/'
      - ASPNETCORE_ENVIRONMENT=Development      
    ports:
      - "5105:80"

  sql.data:
    environment:      
      - SA_PASSWORD=Pass@word
      - ACCEPT_EULA=Y
    ports:
      - "5433:1433"

  elasticsearch:    
    ports:
      - "9200:9200"

我希望这会有帮助。

你在使用Docker工具箱吗

在我的例子中,正常的docker安装在Windows 10上不起作用,因此我必须安装docker toolbox;docker toolbox添加了一个虚拟机,docker在其中运行所有容器

例如,要访问我的停靠应用程序,我必须使用:

这里,192.168.99.100是虚拟机ip


希望它能帮助你!!

docker run命令行是什么?你发布了端口3972吗?(-p 3972:3972)它只是“docker run vault server”。很抱歉,我仍然在与docker打交道。如果docker文件必须公开端口,为什么我必须发布端口?该死的基因…硬编码本地URL!上面写着“docker run”“至少需要1个参数。”除了通常的docker运行参数外,还应提供此标志