我开始开发容器化应用程序和ASP.Net Core 2.0。这两个方面对我来说都是一个新手,我只是想设置一个简单的概念证明应用程序并不是我希望的那样。
目前,我有两个在Docker容器中运行的独立WebApi服务(在Windows 10上运行的Linux容器)。 首先,我只是使用:
创建它们 dotnet new webapi
然后我为每个Dockerfile
添加了一个如下所示的内容:
FROM microsoft/aspnetcore-build:2.0
COPY . /app
WORKDIR /app
RUN ["dotnet", "restore"]
RUN ["dotnet", "build"]
EXPOSE 80/tcp
ENTRYPOINT ["dotnet", "run"]
我还创建了一个docker-compose.yml
,如下所示:
version: "3"
services:
service1:
build: ./service1
ports:
- "8000:80"
service2:
build: ./service2
ports:
- "8001:80"
使用docker-compose build
和docker-compose up
我可以开始跑步。从主机访问服务没有任何缺陷。
然而,这种概念验证应用的目标是连接这些服务。基本上service1
正在访问service2
以获取其他数据。
我向service1
添加了一种尝试从service2
访问数据的方法:
using (var client = new HttpClient())
{
try
{
client.BaseAddress = new Uri("http://service2");
var response = await client.GetAsync("/api/values/5");
response.EnsureSuccessStatusCode(); // Throw in not success
var stringResponse = await response.Content.ReadAsStringAsync();
return stringResponse;
}
catch (HttpRequestException e)
{
return $"error: '{e.Message}'";
}
}
此操作失败,并显示以下消息:
错误:'响应状态代码未指示成功:503(服务不可用)。'
我确认可以在service2
内解析service1
名称。 Pinging service1也很成功。
添加
depends_on:
- "service2"
到Docker-compose.yml
似乎没有任何区别。
我是否缺少一些额外的配置才能从docker容器中访问其他服务?
感谢任何帮助或暗示。
谢谢, 约尔格