如何使用docker和rabbitmq连接两个api-s?

问题描述 投票:0回答:1

我在连接 Docker 容器内的两个 API、SQL 和 RabbitMQ 时遇到困难。我已成功连接其中三个,但无法连接辅助 API 来接收主 API 通过 RabbitMQ 发送的消息。消息正在发送,并且在主 API 的 Docker 控制台和 RabbitMQ 管理中可见。然而,问题在于帮助器 API 中没有接收到它们。我怀疑问题可能出在 Dockerfile 或 Docker Compose 中,因为当它们在 Docker 环境之外运行时,它们可以正常通信。

此外,Docker 容器内的帮助程序 API 控制台存在异常行为。它似乎需要在 Docker 内连接到 SQL,而在 Docker 外部,它根本不连接到任何数据库。它的唯一目的是显示 RabbitMQ 消息,所以我不确定这个问题的根源。我尝试在 Dockerfile 中添加第二个 API,但这两个 API 最终都是彼此相同的副本,导致整个系统崩溃。这种方法没有取得任何成功。我缺乏 Docker 经验,非常感谢您提供的任何帮助。

这是 docker 文件:

FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base
WORKDIR /app
EXPOSE 7166
ENV ASPNETCORE_URLS=http://+:7166

FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
WORKDIR /src
COPY . .

FROM build AS publish
RUN dotnet publish "eCakeShop/eCakeShop.csproj" -c Release -o /app
FROM base AS final
WORKDIR /app
COPY --from=publish /app .

ENTRYPOINT ["dotnet", "eCakeShop.dll"]

这是 docker compose 文件:

version: "3"
services:
  ecakeshop-sql:
    image: "mcr.microsoft.com/mssql/server:2022-latest"
    restart: unless-stopped
    environment:
      SA_PASSWORD: "***********"
      ACCEPT_EULA: "Y"
      MSSQL_PID: "Developer"
    ports:
      - "1434:1433"
    networks:
      - ecakeshopnet

  rabbitmq:
    image: "rabbitmq:latest"
    hostname: "rabbitmq"
    restart: unless-stopped
    ports:
      - "5672:5672"
      - "15672:15672"
    networks:
      - ecakeshopnet

  ecakeshop-api:
    restart: unless-stopped
    build: .
    environment:
      - "ConnectionStrings:eCakeShop=Server=ecakeshop-sql,1433;Database=eCakeShop;Encrypt=true;MultipleActiveResultSets=true;TrustServerCertificate=True;User=sa;Password=**********;"
      - "ASPNETCORE_ENVIRONMENT=Development"
    ports:
      - "7166:7166"
    networks:
      - ecakeshopnet
    depends_on:
      - ecakeshop-sql
      - rabbitmq
    links:
      - ecakeshop-sql

  helper-api:
    restart: unless-stopped
    build: .
    environment:
      - "ConnectionStrings:eCakeShop=Server=ecakeshop-sql,1433;Encrypt=true;MultipleActiveResultSets=true;TrustServerCertificate=True;User=sa;Password=***********;"
      - "ASPNETCORE_ENVIRONMENT=Development"
    ports:
      - "7215:7215"
    networks:
      - ecakeshopnet
    depends_on:
      - rabbitmq

networks:
  ecakeshopnet:
    driver: bridge

我尝试了多次重建、更改端口和本地主机设置、删除数据库,甚至从头开始创建一个新的帮助器 API,但不幸的是,这些尝试都没有解决问题。

c# flutter docker rabbitmq
1个回答
0
投票

您的设置中至少存在一个潜在问题 -

ConnectionStrings:eCakeShop
应为
ConnectionStrings__eCakeShop
。来自环境变量配置提供者文档:

:
分隔符不适用于所有平台上的环境变量分层键。例如,Bash 不支持
:
分隔符。所有平台都支持双下划线 (
__
),它会自动替换环境变量中的任何 : 分隔符。

© www.soinside.com 2019 - 2024. All rights reserved.