繁体   English   中英

.NET Core API:通过 Docker 运行时“本地主机拒绝连接”

[英].NET Core API: "local host refused to connect " when run via Docker

我正在尝试通过 docker 运行一个简单的 web api。

我已按照文档中提到的所有步骤进行操作。

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

# Copy csproj and restore as distinct layers
COPY *.csproj ./
RUN dotnet restore

# Copy everything else and build
COPY . ./
RUN dotnet publish -c Release -o out

# Build runtime image
FROM mcr.microsoft.com/dotnet/core/aspnet:2.2
WORKDIR /app
COPY --from=build-env /app/out .
ENTRYPOINT ["dotnet", "aspnetapp.dll"]

截屏:

在此处输入图片说明 在此处输入图片说明

我用来通过 docker 运行 api 的命令:

docker build -t aspnetapp .
docker run -d -p 8080:80 --name myapp aspnetapp

请注意,当我在命令行中执行以下命令时,api 可以工作,因此 api 本身可能没有任何问题:

dotnet publish -c Release -o out
dotnet run out/ApiForDocker.dll

编辑:

在此处输入图片说明

启动设置

{
  "$schema": "http://json.schemastore.org/launchsettings.json",
  "iisSettings": {
    "windowsAuthentication": false, 
    "anonymousAuthentication": true, 
    "iisExpress": {
      "applicationUrl": "http://localhost:63852",
      "sslPort": 44318
    }
  },
  "profiles": {
    "IIS Express": {
      "commandName": "IISExpress",
      "launchBrowser": true,
      "launchUrl": "api/values",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    },
    "ApiForDocker": {
      "commandName": "Project",
      "launchBrowser": true,
      "launchUrl": "api/values",
      "applicationUrl": "https://localhost:5001;http://localhost:5000",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    }
  }
}

在我看来是正确的。

一个有用的调试选项是将RUN ls -al添加到您的运行时步骤,以确保您的目标是正确的app-name.dll条目。

# Build runtime image
FROM mcr.microsoft.com/dotnet/core/aspnet:2.2
WORKDIR /app
COPY --from=build-env /app/out .
RUN ls -al
ENTRYPOINT ["dotnet", "aspnetapp.dll"]

然后在构建期间查找输出。 或者您可以通过 ssh 进入正在运行的容器来验证它。

$ docker exec -it container-id bash

此外,您始终可以尝试在Properties > launchSettings.json切换到另一个端口,然后使用该端口和--urls -args 更新您的Dockerfile入口点,例如:

ENTRYPOINT ["dotnet", "aspnetapp.dll", "--urls", "http://*:6001"]

然后您还需要在您的主机上映射该端口-p 8080:6001 还要确保您的容器也在侦听该接口(0.0.0.0)。

更新

现在,当您提供了 launchSettings 时:

"ApiForDocker": {
  "commandName": "Project",
  "launchBrowser": true,
  "launchUrl": "api/values",
  "applicationUrl": "https://localhost:5001;http://localhost:5000",
  "environmentVariables": {
    "ASPNETCORE_ENVIRONMENT": "Development"
  }
}

您可以将 docker 入口点更新为:

ENTRYPOINT ["dotnet", "aspnetapp.dll", "--urls", "http://*:5000"]

并使用-p 5000:5000映射主机上的容器,然后localhost:5000/api/values应该在浏览器中的该路由上为您提供 API GET 响应。

我是 docker 新手,在创建新的 mvc 核心项目时遇到了同样的问题,在 VS2019 上使用 docker 调试器,尝试了很多事情,最后得到了我的答案: https ://stackoverflow.com/a/69036711/12537072感谢@ChinaHelloWorld,只需编辑 'launchSettings.json' 并将"publishAllPorts"更改为false

"Docker": {
    "commandName": "Docker",
    "launchBrowser": true,
    "launchUrl": "{Scheme}://{ServiceHost}:{ServicePort}",
    "publishAllPorts": false,
    "useSSL": true
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM