【问题标题】:Unable to connect to Docker .net Core 31. SDK container from host无法连接到 Docker .net Core 31。来自主机的 SDK 容器
【发布时间】:2020-01-06 20:32:24
【问题描述】:

我正在尝试从主机上的浏览器访问托管在 docker 容器中的 .net core webapi(Win 10 Pro 1903;使用 Linux 容器的 Docker Desktop 2.1.0.5)。

webapi 没什么特别的;只是一个使用 .net core 3.1 sdk 的全新 dotnet new webapi 项目。

我可以通过 docker 交互式终端和 kitematic 访问 webapi,所以那里的一切都闪闪发光。当我尝试从主机连接到容器时,事情开始误入歧途。从浏览器/ping 访问容器失败(使用 localhost、127.0.0.1 和容器 ip)。

我已确保所有内容都已更新,重新配置了几次端口,甚至在 Mac 上尝试了相同的结果。

这里是 docker 文件

FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build-env
WORKDIR /app

COPY *.csproj ./
RUN dotnet restore
COPY . ./
RUN dotnet publish -c Release -o out

FROM mcr.microsoft.com/dotnet/core/sdk:3.1
WORKDIR /app
COPY --from=build-env /app/out .

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

我不确定是 SDK 映像的问题(我应该改用 nano 映像)还是 Kestral 配置的问题(我对此表示怀疑)。

任何建议都会很棒

编辑 Docker-Compose

services:

  app:
    image: fooey/webapi
    build:
      context: .
      dockerfile: Dockerfile
    ports:
      - "8000:5001"

对于手动启动 docker run -p 8000:5001 --name api webapi

【问题讨论】:

  • 你在docker rundocker-compose时映射了端口,对吧?你能说明你是如何在本地机器上启动容器的吗?
  • @Matthew 刚刚更新了答案
  • 这个问题与你的 docker 创建的 SDN 网络有关,因此你的容器使用哪个网络来相互连接和主机 1)主机,2)网桥 3)覆盖

标签: c# docker .net-core dockerfile


【解决方案1】:

所以,问题原来是几件事。

  1. 我使用的运行时映像有误,应该不是 SDK
  2. 运行时(和 SDK)都覆盖 launchSettings.json 以使用端口 80 shout out to Wael Kdouh and Kendall Roden

处理此问题的适当方法是使用以下 Dockerfile:

FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build-env
WORKDIR /app

COPY *.csproj ./
RUN dotnet restore
COPY . ./
RUN dotnet publish -c Release -o out

FROM mcr.microsoft.com/dotnet/core/aspnet:3.1
WORKDIR /app
ENV ASPNETCORE_URLS http://+:5000
COPY --from=build-env /app/out .

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

【讨论】:

    猜你喜欢
    • 2020-08-14
    • 2018-01-03
    • 2019-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多