![](/img/trans.png)
[英]Cannot access asp .net core app when run with docker on local machine, or to kubernetes
[英].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.