Java 如何向运行在docker容器中的服务器发送HTTP请求?
我已经建立了一个java应用程序,它充当web服务器并处理http请求。我已经测试过它在容器外工作(确实如此),但是当在容器中时,我的请求似乎无法到达它 服务器侦听端口3971,Dockerfile如下所示: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机器
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运行参数外,还应提供此标志