簡體   English   中英

如何向在 docker 容器中運行的服務器發送 HTTP 請求?

[英]How to send HTTP requests to my server running in a docker container?

我已經設置了一個 Java 應用程序,它充當 Web 服務器並處理 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。 我還需要啟用其他功能嗎?

你正在做EXPOSE 3972,它將端口暴露給其他鏈接的容器,但不暴露給主機

要將端口暴露給主機,您需要...

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

你也可以......

docker run -P

暴露EXPOSE暴露給主機的所有端口(這不是默認值 - 你必須在這里使用-P標志)

你在使用Docker Toolbox ???

在我的情況下,正常的docker安裝在我的Windows 10上沒有工作,所以我不得不安裝Docker工具箱; docker toolbox添加了一個虛擬機,其中docker運行其所有容器。

例如,要訪問我的dockerized應用程序,我必須使用: http//192.168.99.1008080 / app。

這里,192.168.99.100是虛擬機ip。

希望它能幫到你!!!!

在你的html中使用“action =”http://192.168.99.100:8080/rest/data/ingest“來引用你的Docker容器的Rest路徑。請參閱底部的HTML Code第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"

我希望它會有所幫助。

首先使用標簽構建 docker 鏡像。

然后使用 run 命令,您實際上將主機上的端口映射到容器上的端口

$ docker image build -t your-docker-image-name-which-has-api-server .
$ docker run --rm -it  -p 8000:8000/tcp your-docker-image-name-which-has-api-server:latest

使用 httpie 客戶端發送您的 HTTP 請求

http -v http://localhost:8080

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM