从docker容器访问asp.net核心服务
我正在开发容器化应用程序和ASP.Net Core 2.0。 这两个方面对我来说都是相当新的,我只是试图build立一个简单的概念certificate应用程序并不是我所希望的。
目前,我有两个独立的WebApi服务运行在Docker容器(在Windows 10上运行的Linux容器)。 首先,我使用以下方法创build它们:
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"]
我也创build了一个如下所示docker-compose.yml
:
version: "3" services: service1: build: ./service1 ports: - "8000:80" service2: build: ./service2 ports: - "8001:80"
使用docker-compose build
和docker-compose up
我可以起来跑步。 从主机访问服务没有任何缺陷。
然而,这个概念certificate应用的目标是连接这些服务。 基本上, 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
解决。 Ping服务1也是成功的。
添加
depends_on: - "service2"
到Docker-compose.yml
似乎也没有区别。
我错过了一些额外的configuration,以便能够从docker集装箱内访问其他服务?
任何帮助或暗示赞赏。
谢谢,约尔格