Try   HackMD

dotnet 8 container expose port

dotnet 7 (含) 以下的 expose 設定

FROM mcr.microsoft.com/dotnet/aspnet:7.0-bookworm-slim AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

dotnet 8 以後的 expose 設定

方案一:配合官方異動,改成 expose 8080,並調整 docker run 與 k8s 中的網路設定

  • dockerfile
    ​​FROM mcr.microsoft.com/dotnet/aspnet:8.0-bookworm-slim AS base
    ​​WORKDIR /app
    ​​EXPOSE 8080
    ​​EXPOSE 443
    
  • docker run
    ​​docker run -d -p {your port}:8080 --name sample-webservice -e ASPNETCORE_ENVIRONMENT=Test {image}
    
  • k8s resource
    • service
      ​​​​apiVersion: v1
      ​​​​kind: Service
      ​​​​spec:
      ​​​​  ports:
      ​​​​    - name: http
      ​​​​      port: 8080
      ​​​​      protocol: TCP
      ​​​​      targetPort: 8080 # 這個欄位對應容器的 expose,升級 dotnet 8 後,這個欄位會從 80 異動成 8080
      
    • deployment
      ​​​​apiVersion: app/v1
      ​​​​kind: Deployment
      ​​​​spec:
      ​​​​  template:
      ​​​​    spec:
      ​​​​      containers:
      ​​​​        - name: "sample-webservice"
      ​​​​          env:
      ​​​​            - name: ASPNETCORE_ENVIRONMENT
      ​​​​              value: Test
      ​​​​          ports:
      ​​​​            - name: http
      ​​​​              containerPort: 8080 # 這個欄位對應容器的 expose,整個部署設定中,只應該有這個欄位從 80 異動成 8080
      ​​​​              protocol: TCP
      

方案二:維持現有 expose,但是調整部署時的執行設定 (加上環境參數指定 port)

  • Dockerfile
    ​​FROM mcr.microsoft.com/dotnet/aspnet:8.0-bookworm-slim AS base
    ​​WORKDIR /app
    ​​EXPOSE 80
    ​​EXPOSE 443
    
  • docker run
    ​​docker run -d -p {service excepose port}:80 --name sample-webservice -e ASPNETCORE_ENVIRONMENT=Test -e ASPNETCORE_HTTP_PORTS=80 {image}
    
  • k8s resource
    • deployment
      ​​​​apiVersion: app/v1
      ​​​​kind: Deployment
      ​​​​spec:
      ​​​​  template:
      ​​​​    spec:
      ​​​​      containers:
      ​​​​        - name: "sample-webservice"
      ​​​​          env:
      ​​​​            - name: ASPNETCORE_ENVIRONMENT
      ​​​​              value: Test
      ​​​​            # 下面 ASPNETCORE_HTTP_PORTS 的環境參數是用於指定服務啟動時,告知 .net 服務要使用哪個 port 作為進入的 port
      ​​​​            - name: ASPNETCORE_HTTP_PORTS
      ​​​​              value: "80"