docker - 如何在 linx docker 容器上部署 aspnet 核心应用程序而不会出现 404 错误
问题描述
我有一个 ASPNET Core 5.0 Web api 应用程序在 Windows 本地成功运行,但在部署到 linux 服务器上托管的 linux docker 容器时失败。导航到http://internal.apps.talquinelectric.com/is/api时页面不会加载。我收到 404 错误。
启动设置.json
{
"$schema": "http://json.schemastore.org/launchsettings.json",
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:80",
"sslPort": 80
}
},
"profiles": {
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"launchUrl": "swagger",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"FixBatchAPI": {
"commandName": "Project",
"launchBrowser": true,
"launchUrl": "http://internal.apps.talquinelectric.com/is/api",
"applicationUrl": "http://internal.apps.talquinelectric.com/is/api",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Production"
}
}
}
}
启动.cs
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseSwagger();
app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "FixBatchAPI v1"));
}
//app.UseHttpsRedirection();
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}
Dockerfile
# syntax=docker/dockerfile:1
FROM mcr.microsoft.com/dotnet/aspnet:5.0
COPY FixBatchAPI/net50/ App/
WORKDIR /App
ENTRYPOINT ["dotnet", "FixBatchAPI.dll"]
码头工人-compose.yml
version: "3"
services:
fixbatch-api:
image: "fixbatch-api-build:latest"
container_name: "fixbatch-api"
networks:
- traefix_proxy
labels:
- "traefik.enable=true"
- "traefik.docker.network=traefik_proxy"
- "traefik.http.routers.fixbatch-api.entrypoint=https"
- "traefik.http.routers.fixbatch-api.tls=true"
- "traefik.http.routers.fixbatch-api.rule=Host(`internal.apps.talquinelectric.com`) && PathPrefix(`/is/api`)"
- "traefik.http.services.fixbatch-api-service.loadbalancer.server.port=80"
- "traefik.http.middlewares.fixbatch-api-middlewares.chain.middlewares=fixbatch-api-strip"
- "traefik.http.middlewares.fixbatch-api-strip.stripprefix.prefixes=/is/api"
- "traefik.http.routers.fixbatch-api-http.entrypoint=http"
- "traefik.http.routers.fixbatch-api-http.rule=Host(`internal.apps.talquinelectric.com`) && PathPrefix(`/is/api`)"
- "traefik.http.middlewares.fixbatch-api-redirect-https.redirectscheme.scheme=https"
- "traefik.http.routers.fixbatch-api-http.middlewares=fixbatch-api-redirect-https"
- "traefik.http.middlewares.cors.headers.accesscontrolallowmethods=GET,OPTIONS,PUT"
- "traefik.http.middlewares.cors.headers.accesscontrolalloworigin=*"
- "traefik.http.middlewares.cors.headers.addvaryheader=true"
networks:
traefik_proxy:
external: true
default:
external: false
docker-compose 日志的结果:
在浏览器中查看时得到的结果:
解决方案
添加如下代码,即可打开 swaggerui 页面。
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseSwagger();
app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "FixBatchAPI v1"));
}
// default, no below code
else {
app.UseSwagger();
app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "FixBatchAPI v1"));
}
推荐阅读
- java - 创建一个链表二维数组类
- python - 字典列表中特定键的值总和python
- tensorflow - 使用 TF ImageGenerator 训练模型时出现 UnidentifiedImageError
- terraform - Terraform New Relic Workload 资源的查询格式是什么
- android - Android:遍历对象 ArrayList 抛出 ConcurrentModificationException
- php - 通过php发送邮件时的安全问题
- ssl - 在 Rust 中通过 TLS 重定向 stdio
- html - CSS网格中的图像-如何使行高由内容(图像)高度确定?Chrome 与在 Firefox 中正确呈现
- java - 最终字段语义
- vba - 如何在 VBA 中获取对文本框控件的引用而不是文本框的值