我是Docker容器的新手,遇到以下問題。我正在開發一個網頁,向暴露的api發出請求。它們都發布在通過網絡鏈接的不同容器上。 這是我的搬運工,compose.yml文件:網絡Docker容器上的HttpClient請求
version: '2'
services:
api:
image: my/api
networks:
- api
ports:
- "8080:5000"
container_name: api
web:
build:
context: ./DockerWeb
networks:
- api
ports:
- "80:5000"
container_name: web
networks:
api:
driver: bridge
我注意到,如果我連接到容器中運行我的網頁上我可以ping該API容器不使用ping api
問題來當任何問題試圖對api容器進行任何Web服務調用。我試圖初始化一個HttpClient對象,但是這種對象的BaseAddress屬性必須設置爲有效的Uri。
_client = new HttpClient();
_client.BaseAddress = new Uri(config.ApiUrl); //config.ApiUrl = "api"
這引發以下錯誤
UriFormatException: Invalid URI: The format of the URI could not be determined.
有沒有辦法要麼一)以不同的方式暴露容器名稱,或b)作出一個Web服務的調用,而不需要使用URI? 我該如何做到這一點?
UPDATE
我已經更新了ApiUrl爲包含值http:api:8080
,但現在正執行呼叫
System.AggregateException: One or more errors occurred. (An error occurred while sending the request.) ---> System.Net.Http.HttpRequestException: An error occurred while sending the request. ---> System.Net.Http.CurlException: Couldn't connect to server
,當我得到一個例外,我也直接嘗試調用API端點從我的web容器中使用wget
wget http://api:8080/
但是我仍然收到回一個錯誤:
Connecting to api (api)|172.24.0.4|:8080... failed: Connection refused
這可能是一個API配置錯誤?
謝謝你的回答。我已經更新來調用http:api:8080,但是我得到一個異常「System.Net.Http.CurlException:無法連接到服務器」我也嘗試了以下從我的Web容器'wget http:// api :8080 /'我收到以下錯誤:連接到api(api)| 172.24.0.4 |:8080 ...失敗:連接被拒絕。 –
我注意到,即使我公開端口8080的API,這不是容器之間使用的端口。在同一網絡中的容器之間,使用EXPOSE指令公開的端口。在這種情況下,它將是5000.試圖http:// api:5000 /工作 –
@LuisBecerril對不起。我必須對docker compose yml文件中的端口綁定次序感到困惑。 – spender