Sam*_*ack 8 .net c# docker azure-devops asp.net-core
我正在尝试通过 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"]
Run Code Online (Sandbox Code Playgroud)
截屏:
我用来通过 docker 运行 api 的命令:
docker build -t aspnetapp .
docker run -d -p 8080:80 --name myapp aspnetapp
Run Code Online (Sandbox Code Playgroud)
请注意,当我在命令行中执行以下命令时,API 会起作用,因此 API 本身可能没有任何问题:
dotnet publish -c Release -o out
dotnet run out/ApiForDocker.dll
Run Code Online (Sandbox Code Playgroud)
编辑:
启动设置
{
"$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 Code Online (Sandbox Code Playgroud)
小智 18
我是 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
}
Run Code Online (Sandbox Code Playgroud)
对我来说看起来不错。
一个有用的调试选项是添加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"]
Run Code Online (Sandbox Code Playgroud)
然后在构建期间查找输出。或者您可以通过 ssh 进入正在运行的容器来验证它。
$ docker exec -it container-id bash。
另外,您始终可以尝试切换到另一个端口Properties > launchSettings.json,然后Dockerfile使用该端口和--urls-args 更新您的入口点,例如:
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"
}
}
Run Code Online (Sandbox Code Playgroud)
您可以将 docker 入口点更新为:
ENTRYPOINT ["dotnet", "aspnetapp.dll", "--urls", "http://*:5000"]
并将容器映射到主机上-p 5000:5000,然后localhost:5000/api/values应该在浏览器中的该路由上为您提供 API GET 响应。
| 归档时间: |
|
| 查看次数: |
8070 次 |
| 最近记录: |