如何发送HTTP请求到在泊坞窗容器中运行的服务器?

我已经build立了一个Java应用程序,它充当一个Web服务器并处理http请求。 我已经testing过它在容器之外工作(但它在容器中),但是当容器在容器中时,我的请求似乎没有得到它。

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

FROM java:8 ADD VaultServer / EXPOSE 3971 EXPOSE 3972 ENTRYPOINT ["java", "-jar", "VaultServer.jar"] 

调用根地址应该返回一些东西(通常我会发送一个GET到http:// localhost:3971 / )。

我已经尝试用docker-machine的ip地址replace'localhost',并且在检查我的服务器正在运行的容器时得到的ip地址,但都没有响应。 当我打电话给docker机的IP地址,我得到ERR_CONNECTION_REFUSED。 还有什么我需要启用?

你正在做的EXPOSE 3972暴露端口到其他链接的容器,但不是主机

要将端口暴露给主机,请执行以下操作:

 docker run -p 3972:3972 ....... etc 

你也可以做…

 docker run -P 

将EXPOSE公开的所有端口暴露给主机(这不是默认的 – 您必须在这里使用-P标志)

在你的html中使用“action =”http://192.168.99.100:8080/rest/data/ingest“来引用你的Docker容器的Restpath,见底部的HTML代码,第4行。

http://192.168.99.100:8080/rest/data/ingest细分:

1)192.168.99.100:8080 = Docker的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> 

JAVA代码:

 @Path("/data") public class YourClass { @POST @Path("/ingest") public Response yourMethod (...){ } 

我可以告诉你如何与其他容器(MSSQL和Elasticsearch)组成dotnet核心项目,也许它会帮助你。

为docker-compose.yml添加另一个容器的依赖关系:

 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 

然后写入docker-compose.override.yml,在那里你将覆盖你的appsetting文件,并将获得访问另一个容器:

 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" 

我希望这会有帮助。