多容器Docker应用程序-内部Rest API通信

时间:2019-11-12 07:36:33

标签: azure api docker asp.net-core docker-compose

我已经创建了一个多容器docker应用程序,该应用程序托管在使用docker compose的azure Linux应用程序服务上,用于从azure容器注册表中提取的图像。

我的应用程序由一个Web应用程序前端以及目前的3个API项目组成。我已经部署了所有这些应用程序,但是在使Web应用程序与API通信时遇到了问题。由于我只是最近才部署了Web应用程序和其他应用程序,因此我一直在使用本地主机端点进行API调用。用前端测试API的功能一直很好,但是当我现在部署项目时,我需要与容器内的服务进行通信,但是我尝试的一切似乎都无法正常工作,结果出现500个内部服务器错误。

我为dev开发的docker-compose文件如下:

version: "3.7"
services:

  webapp:
    image: {MyApp}.azurecr.io/{ProjectName}:dev
    ports:
      - "80:80"
    networks:
      {ProjectName}-net:
        ipv4_address: 172.28.1.1
    depends_on:
      - {App1}.api
      - {App2}.api
      - {App3}.api

  {App1}.api:
    image: {MyApp}.azurecr.io/{App1}api:dev
    container_name: {App1}
    ports: 
      - "2000:2000"
    networks:
      {ProjectName}-net:
        ipv4_address: 172.28.1.2
    depends_on:
      - xamlbuilder.api

  {App2}.api:
    image: {MyApp}.azurecr.io/{App2}:dev
    container_name: {App2}
    ports:
      - "3000:3000"
    networks:
      {ProjectName}-net:
        ipv4_address: 172.28.1.3

  {App3}.api:
    image: {MyApp}.azurecr.io/{App3}:dev
    container_name: {App3}
    ports: 
      - "4000:4000"
    networks:
      {ProjectName}-net:
        ipv4_address: 172.28.1.4

networks:
  {ProjectName}-net:
    ipam:
      driver: bridge
      config:
        - subnet: 172.28.0.0/16

DockerFile(webapp):

FROM mcr.microsoft.com/dotnet/core/sdk:3.0 AS build
WORKDIR /source

COPY . .
RUN dotnet restore

RUN dotnet publish --output /app/ --configuration Release --no-restore

FROM mcr.microsoft.com/dotnet/core/aspnet:3.0 AS runtime
WORKDIR /app
COPY --from=build /app .

ENTRYPOINT ["dotnet", "{ProjectName}.WebApp.dll"]
EXPOSE 80

Dockerfile {App1}

FROM mcr.microsoft.com/dotnet/core/sdk:3.0 AS build
WORKDIR /source

COPY . .
RUN dotnet restore

RUN dotnet publish --output /app/ --configuration Release --no-restore

FROM mcr.microsoft.com/dotnet/core/aspnet:3.0 AS runtime
WORKDIR /app
COPY --from=build /app .

ENTRYPOINT ["dotnet", "{ProjectName}.{App1}.API.dll"]
EXPOSE 2000

(其他应用程序是类似的dockerfiles)

我最近的尝试是添加网络配置和静态IP地址,因为我们无法使其正常运行。我不知道此问题是否与我的端点有关(我尝试用各种方式的端点替换localhost端点-URL / app1:portNumber / Methods,URL / app1 / Methods,IPAddress:portNumber / Methods,IPAddress / Methods等)。

任何人都可以看到显而易见的东西吗?我刚刚使用了错误的端点还是它是compose / dockerfile / config问题?

非常感谢您的指导!

1 个答案:

答案 0 :(得分:0)

从您提供的docker-compose文件中可以看到,您在其中设置了networks属性。但是,容器的Azure Web App当前不支持networks属性。使用它时,可能会引起问题,但Azure Web App会忽略它。请参阅Docker Compose options,以查找受支持和不受支持的

此外,Azure Web App仅支持将端口80或443公开到Internet。您无法将文件中的其他端口(例如3000和2000)公开到Internet。

您可以看一下Create a multi-container (preview) app in Web App for Containers的示例。我认为这对您有帮助。