我在连接 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,但不幸的是,这些尝试都没有解决问题。
您的设置中至少存在一个潜在问题 -
ConnectionStrings:eCakeShop
应为 ConnectionStrings__eCakeShop
。来自环境变量配置提供者文档:
分隔符不适用于所有平台上的环境变量分层键。例如,Bash 不支持:
分隔符。所有平台都支持双下划线 (:
),它会自动替换环境变量中的任何 : 分隔符。__