【发布时间】:2021-09-25 12:12:02
【问题描述】:
我在 docker 上建立 SignalR 连接时遇到问题(IIS 运行良好)。
主要目标是运行 docker compose 并将数据从 nodeRed 容器发送到 webApp(.net core 3.1 Blazor),反之亦然。我制作了 docker network 并成功地将两个容器放在那里。
问题是我的 SignalR 连接失败并显示“连接被拒绝”。我认为这会有些平庸,但找不到。
page.razor
protected override async Task OnInitializedAsync()
{
hubConnection = new HubConnectionBuilder()
.WithUrl("http://AICsystemApp/nodeRedHub")
.Build();
hubConnection.On<string, string>("ReceiveCommand", (user, message) =>
{
var encodedMsg = $"{destination}: {message}";
nodeRedOutput.Add(encodedMsg);
StateHasChanged();
});
await hubConnection.StartAsync();
}
Dockerfile
FROM mcr.microsoft.com/dotnet/aspnet:3.1 AS base
WORKDIR /app
EXPOSE 80 /* tried 8024 */
EXPOSE 443 /* tried 44324 */
FROM mcr.microsoft.com/dotnet/sdk:3.1 AS build
WORKDIR /src
COPY ["AICsystemApp/AICsystemApp.csproj", "AICsystemApp/"]
RUN dotnet restore "AICsystemApp/AICsystemApp.csproj"
COPY . .
WORKDIR "/src/AICsystemApp"
RUN dotnet build "AICsystemApp.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "AICsystemApp.csproj" -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "AICsystemApp.dll"]
docker-compose.override.yml
version: '3.4'
services:
aicsystemapp:
container_name: AICsystemApp
environment:
- ASPNETCORE_ENVIRONMENT=Development
- ASPNETCORE_URLS=https://+:443;http://+:80
ports:
- "8024:80"
- "44324:443"
volumes:
- ${APPDATA}/Microsoft/UserSecrets:/root/.microsoft/usersecrets:ro
- ${APPDATA}/ASP.NET/Https:/root/.aspnet/https:ro
networks:
- my-network
networks:
my-network:
external: true
我与官方文档建立了 SignalR 连接,并根据此线程使用“http://AICsystemApp/nodeRedHub”而不是“NavigationManager.ToAbsoluteUri("/chathub")”:how to run StartAsync connection of signalr blazor client in docker image?
我很困惑 docker 在 https:// 中运行容器,但如果我使用“https://AICsystemApp/nodeRedHub”,我会收到错误消息:“根据验证程序,远程证书无效。”
编辑*找出我是否使用“https://AICsystemApp:44324/nodeRedHub”我没有错误的https,但同样的“连接被拒绝”错误。引人入胜。
如果您需要更多信息,我随时准备回复! :) 提前致谢。
也试过ipaddress:port/nodeRedHub,结果一样。
【问题讨论】:
-
在您的 yml 文件中,端口 44324 指向 443,这是 ssl,所以这就是为什么当您放入端口时它可以工作。我也没有在您的文件中看到证书(自签名或域) .yml 文件。这可能就是您收到该证书错误的原因。您应该使用 nginx.conf 文件作为 ssl 代理。
标签: docker asp.net-core docker-compose blazor-server-side asp.net-core-signalr