2016-03-31 36 views
4

我已經設置了一個java應用程序,它充當web服務器並處理http請求。我已經測試過它在容器外部工作(它的工作原理),但是當它在容器中時,我的請求看起來並沒有達到它。如何將HTTP請求發送到在泊塢窗容器中運行的服務器?

服務器偵聽端口3971,以及Dockerfile看起來是這樣的:

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

調用到根地址應該返回的東西(通常我會發送一個GET到http://localhost:3971/)。

我試過用docker-machine的ip地址替換'localhost',還用我在檢查服務器運行容器時得到的ip地址,但都沒有迴應。當我調用docker-machine的ip地址時,我得到了ERR_CONNECTION_REFUSED。還有什麼我需要啓用?

+1

什麼是碼頭運行命令行?你發佈了3972端口嗎? (-p 3972:3972) – Michael

+0

這只是'docker run vault-server'。對不起,我仍然在與碼頭工人交談。如果Dockerfile必須公開端口,爲什麼我必須發佈端口? – Andy

回答

8

你正在做的EXPOSE 3972暴露的端口到其他鏈接容器中而不是主機

要暴露的端口你做主機......

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

你也可以這樣做...

docker run -P 

它將EXPOSE公開的所有端口暴露給主機(這不是默認的 - 您必須使用-P標誌在這裏)

0

在你的html中使用「action =」http://192.168.99.100:8080/rest/data/ingest「來引用你的Docker容器的休息路徑。見底部的HTML代碼,行4

http://192.168.99.100:8080/rest/data/ingest擊穿:

1)192.168.99.100:8080=多克的IP地址&端口號。

2)/休息/ =在web.xml文件

3)數據/ = @Path( 「/數據」)

4)/攝取= @Path( 「/攝取」)

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 (...){ 
} 
+2

地獄基因...硬編碼本地網址! – yUdoDis

+1

是的,你是對的,但你明白了。 – Gene

0

我可以告訴你如何與其他容器(MSSQL和Elasticsearch)組合dotnet核心項目,也許它會幫助你。

要泊塢窗,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 

而且在泊塢窗,compose.override.yml,在那裏你將覆蓋appsetting文件編寫,並可以訪問另一個容器:

services: 

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

    sql.data: 
    environment:  
     - [email protected] 
     - ACCEPT_EULA=Y 
    ports: 
     - "5433:1433" 

    elasticsearch:  
    ports: 
     - "9200:9200" 

我希望這會有幫助。