【问题标题】:Dotnet Core development in dockerDocker 中的 Dotnet Core 开发
【发布时间】:2019-01-14 22:29:53
【问题描述】:

我正在尝试使用 docker 设置 dotnet 核心开发环境。我指的是以下指南进行设置。 LINK

docker run --rm -it -p 8000:80 -v c:\git\dotnet-docker\samples\aspnetapp:/app/ -w /app/aspnetapp microsoft/dotnet:2.1-sdk dotnet watch run

示例项目在端口 80 上运行。这里没有问题。

但是当我使用 dotnet cli 构建项目时,应用程序将在容器内的端口 5000、5001 上运行,而不是 80。

dotnet new webapi

是什么让示例应用程序在端口 80 上运行?我比较了以下文件,但在这里没有发现任何有用的东西。

  • appsettings.Development.json
  • appsettings.json
  • aspnetapp.csproj
  • Program.cs
  • Startup.cs

我的代码的 GitHub 链接。 LINK

我的项目上的命令

docker run --rm -it -p 8000:80 -v c:\git\dotnet-docker-demo:/app/ -w /app microsoft/dotnet:2.1-sdk dotnet watch run

编辑:

这里不涉及 docker 文件。我正在尝试直接在源代码上使用 dotnet watch run。我不想构建 dll 然后在容器中运行它。

【问题讨论】:

  • @omajid 我已经解决了这个问题。但对我来说,情况不同。我正在使用相同的 docker 映像来运行这两个应用程序,但其中一个没有在端口 80 上启动应用程序。另外,请注意,我没有使用任何 Dockerfile 我直接按原样运行该映像.

标签: docker asp.net-core .net-core


【解决方案1】:

您可以在 docker 文件中提及端口号,我在下面的 docker 映像文件中用箭头突出显示

# FROM microsoft/dotnet:2.0-sdk AS build
FROM microsoft/dotnet:2.0-sdk
WORKDIR /app

# copy csproj and restore as distinct layers
COPY *.sln .
COPY TodoService/*.csproj ./TodoService/
RUN dotnet restore

# copy everything else and build app
COPY TodoService/. ./TodoService/
WORKDIR /app/TodoService
RUN dotnet publish -o out /p:PublishWithAspNetCoreTargetManifest="false"


# FROM microsoft/dotnet:2.0-runtime AS runtime
FROM microsoft/dotnet:2.0-runtime
ENV ASPNETCORE_URLS http://+:80  # <----------------
WORKDIR /app
COPY --from=0 /app/TodoService/out ./

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

【讨论】:

  • Dockerfile 未用于运行容器。我们直接将基础 dotnet-sdk 映像和 command+args 作为参数传递给 docker run 命令。
  • 这也将构建一个 dll 并运行它。我想直接在源上使用 dotnet watch run 命令。这就是问题发生的时候。
【解决方案2】:

环境变量 ASPNETCORE_URLS 的值决定了使用哪个端口来绑定 HTTP 侦听器。可以使用 shell 或内联 dotnet run 设置此变量:

ASPNETCORE_URLS=http://+8080 \
dotnet run

在本地开发时定义 URL 的另一种技术是使用 DOCS here 中描述的 launchSettings.json

来自文档的示例:

{
  "iisSettings": {
    "windowsAuthentication": false,
    "anonymousAuthentication": true,
    "iisExpress": {
      "applicationUrl": "http://localhost:54339/",
      "sslPort": 0
    }
  },
  "profiles": {
    "IIS Express": {
      "commandName": "IISExpress",
      "launchBrowser": true,
      "environmentVariables": {
        "ASPNETCORE_My_Environment": "1",
        "ASPNETCORE_DETAILEDERRORS": "1",
        "ASPNETCORE_ENVIRONMENT": "Staging"
      }
    },
    "EnvironmentsSample": {
      "commandName": "Project",
      "launchBrowser": true,
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Staging"
      },
      "applicationUrl": "http://localhost:54340/"
    },
    "Kestrel Staging": {
      "commandName": "Project",
      "launchBrowser": true,
      "environmentVariables": {
        "ASPNETCORE_My_Environment": "1",
        "ASPNETCORE_DETAILEDERRORS": "1",
        "ASPNETCORE_ENVIRONMENT": "Staging"
      },
      "applicationUrl": "http://localhost:51997/"
    }
  }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-15
    • 1970-01-01
    • 2018-10-15
    • 2019-07-20
    • 1970-01-01
    • 2021-06-11
    • 2018-08-15
    相关资源
    最近更新 更多