【发布时间】:2021-05-17 22:51:58
【问题描述】:
我是 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
我注意到,如果我附加到运行我的网页的容器,我可以使用ping api ping api 容器而不会出现任何问题
尝试对 api 容器进行任何 Web 服务调用时会出现问题。我正在尝试初始化一个 HttpClient 对象,但是必须将此类对象的 BaseAddress 属性设置为有效的 Uri。
_client = new HttpClient();
_client.BaseAddress = new Uri(config.ApiUrl); //config.ApiUrl = "api"
这会引发以下错误
UriFormatException: Invalid 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/
但是我仍然收到错误消息:
连接到 api (api)|172.24.0.4|:8080... 失败:连接被拒绝
这可能是 API 配置错误吗?
【问题讨论】:
标签: c# docker asp.net-core-webapi docker-networking