网络 docker 容器上的 HttpClient 请求

Lui*_*ril 7 c# docker docker-networking asp.net-core-webapi

我是 docker 容器的新手,我遇到了以下问题。我正在开发一个向公开的 api 发出请求的网页。它们都发布在通过网络链接的不同容器上。这是我的 docker-compose.yml 文件:

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
Run Code Online (Sandbox Code Playgroud)

我注意到,如果我附加到运行我的网页的容器,我可以使用 ping api 容器而不会出现任何问题 ping api

尝试对 api 容器进行任何 Web 服务调用时会出现问题。我正在尝试初始化一个 HttpClient 对象,但是必须将此类对象的 BaseAddress 属性设置为有效的 Uri。

_client = new HttpClient();
_client.BaseAddress = new Uri(config.ApiUrl); //config.ApiUrl = "api"
Run Code Online (Sandbox Code Playgroud)

这会引发以下错误

UriFormatException:无效的 URI:无法确定 URI 的格式。

有没有办法 a) 以不同的方式公开容器名称,或者 b) 在不需要使用 URI 的情况下调用 Web 服务?我怎样才能做到这一点?

更新

我已更新 ApiUrl 以包含该值http:api:8080,但是现在执行调用时出现异常

System.AggregateException:发生一个或多个错误。(发送请求时出错。) ---> System.Net.Http.HttpRequestException:发送请求时出错。---> System.Net.Http.CurlException: 无法连接到服务器

我还尝试使用 wget 直接从我的 Web 容器调用 api 端点

wget http://api:8080/ 
Run Code Online (Sandbox Code Playgroud)

但是我仍然收到一个错误:

连接到 api (api)|172.24.0.4|:8080... 失败:连接被拒绝

这可能是 API 配置错误吗?

spe*_*der 8

api只是主机名。URI 将是http://api:8080(或者https://api:someotherport如果您设置了 SSL/TLS。)