You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

配置Caddyfile与ASP.NET Core9+Angular本地HTTPS时访问失败排查

ASP.NET Core + Angular 容器部署访问异常排查

项目创建步骤

mkdir <solution_name>
cd <solution_name>
dotnet new sln --name <solution_name>
mkdir src
cd src
dotnet new angular -n App
# 以下为Visual Studio操作
打开<solution_name>解决方案
右键创建名为src的新文件夹
右键点击src,添加现有项目App

配置文件内容

CaddyDockerfile

FROM caddy:latest
COPY Caddyfile /etc/caddy/Caddyfile

Caddyfile

{
    local_certs
}

app.localhost {
    reverse_proxy penaltycancellationformui:5001
}

docker-compose.yml(已手动创建并信任本地证书)

services:
  penaltycancellationformui:
    image: ttcuipenaltycancellationform:dev
    build:
      context: . # 根目录路径(相对docker-compose.yml)
      dockerfile: Dockerfile # 相对构建上下文路径
    networks:
      - caddy-net
    environment:
      - ASPNETCORE_Kestrel__Certificates__Default__Password=mysuperpassword
      - ASPNETCORE_Kestrel__Certificates__Default__Path=/https/ttcuipenaltycancellationform.pfx
    volumes:
      - ${USERPROFILE}/.aspnet/https:/https/
  caddy:
    image: caddy:dev
    build:
      context: .
      dockerfile: CaddyDockerfile
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./Caddyfile:/etc/caddy/Caddyfile
      - caddy_data:/data
    networks:
      - caddy-net
    depends_on:
      - penaltycancellationformui
networks:
  caddy-net:
        
volumes:
  caddy_data:

Dockerfile

# Stage 1: Build Angular App
FROM mcr.microsoft.com/dotnet/aspnet:9.0 AS base
# 不安装node

# Stage 2: Build .NET Application
FROM mcr.microsoft.com/dotnet/sdk:9.0 AS dotnet-build
RUN apt-get update && apt-get install -y nodejs npm
WORKDIR /src
COPY App.csproj .
RUN dotnet restore
COPY . .

# Stage 3: Publish .Net
FROM dotnet-build AS dotnet-publish
RUN dotnet publish -c Release -o /app

# Stage 4: Combine Angular and .NET for Deployment
FROM base AS final
WORKDIR /app
ENV ASPNETCORE_URLS=https://+:5001;http://+:5000
COPY --from=dotnet-publish /app .
ENTRYPOINT ["dotnet", "App.dll"]

问题现象

执行docker compose up -d后,容器创建成功,但访问app.localhost无法加载内容。

Caddy错误日志

{"level":"error","ts":1745422772.0373719,"logger":"http.log.error","msg":"EOF","request":{"remote_ip":"172.23.0.1","remote_port":"54724","client_ip":"172.23.0.1","proto":"HTTP/2.0","method":"GET","host":"app.localhost","uri":"/","headers":{"Sec-Fetch-Mode":["navigate"],"Sec-Fetch-Dest":["document"],"Sec-Ch-Ua":["\"Not(A:Brand\";v=\"99\", \"Google Chrome\";v=\"133\", \"Chromium\";v=\"133\""]},"Sec-Fetch-Site":["none"],"Accept-Encoding":["gzip, deflate, br, zstd"],"Accept-Language":["en-US,en;q=0.9"],"Sec-Ch-Ua-Mobile":["?0"],"Sec-Ch-Ua-Platform":["\"Windows\""]},"Upgrade-Insecure-Requests":["1"],"Sec-Fetch-User":["?1"],"Priority":["u=0, i"],"Cache-Control":["max-age=0"],"User-Agent":["Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36"],"Accept":["text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7"]},"tls":{"resumed":false,"version":772,"cipher_suite":4865,"proto":"h2","server_name":"app.localhost"}},"duration":0.037247804,"status":502,"err_id":"ahwzwi12f","err_trace":"reverseproxy.statusError (reverseproxy.go:1390)"}

容器端口状态

执行docker compose ps发现app-penaltycancellationformui-1容器未暴露定义的5000和5001端口:

NAME                              IMAGE                              COMMAND                  SERVICE                     CREATED         STATUS         PORTS
app-caddy-1                       caddy:dev                          "caddy run --config …"   caddy                       6 seconds ago   Up 6 seconds   0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp, 443/udp, 2019/tcp
app-penaltycancellationformui-1   ttcuipenaltycancellationform:dev   "dotnet App.dll"         penaltycancellationformui   7 seconds ago   Up 6 seconds

请问我遗漏了什么配置?


内容的提问来源于stack exchange,提问作者Hoang Minh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 07:43:09