[英]How to make a docker container send an HTTP request to another container running in same network
[英]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.100 : 8080 / 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.