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

如何用.NET 8 dotnet publish命令构建多架构Docker容器及GitHub Actions实现

使用.NET 8的dotnet publish构建多架构Docker容器

一、本地构建多架构镜像方案

.NET 8的dotnet publish /t:PublishContainer支持直接生成多架构Docker镜像,核心依赖Docker Buildx功能(需确保本地Docker已启用该功能)。以下是可直接运行的命令格式:

dotnet publish ./Wowshop.API/Wowshop.API.csproj /t:PublishContainer \
  -r linux-x64 -r linux-arm64 \
  -p:ContainerImageName=wowshop-api \
  -p:ContainerRegistry=your-registry.io

关键参数说明

  • 多个目标架构需用独立的-r参数指定(而非分号分隔),.NET 8会自动调用Docker Buildx完成多架构构建
  • -p:ContainerImageName:自定义镜像名称
  • -p:ContainerRegistry:指定镜像仓库地址(如需要推送到远程仓库)
  • 若要直接推送镜像到仓库,追加-p:ContainerPush=true参数即可:
dotnet publish ./Wowshop.API/Wowshop.API.csproj /t:PublishContainer \
  -r linux-x64 -r linux-arm64 \
  -p:ContainerImageName=wowshop-api \
  -p:ContainerRegistry=your-registry.io \
  -p:ContainerPush=true

二、GitHub Actions多架构构建流程

以下是完整的工作流配置,实现代码推送时自动构建并推送多架构镜像:

name: Build Multi-Arch Docker Image
on:
  push:
    branches: [ main ]
    tags: [ v* ]

env:
  IMAGE_NAME: wowshop-api
  REGISTRY: ghcr.io
  OWNER: ${{ github.repository_owner }}

jobs:
  build-and-push:
    runs-on: ubuntu-latest
    steps:
      # 1. 检出代码
      - name: Checkout code
        uses: actions/checkout@v4

      # 2. 安装.NET 8 SDK
      - name: Setup .NET 8
        uses: actions/setup-dotnet@v4
        with:
          dotnet-version: 8.x

      # 3. 登录到容器仓库(以GHCR为例)
      - name: Login to GHCR
        uses: docker/login-action@v3
        with:
          registry: ${{ env.REGISTRY }}
          username: ${{ github.actor }}
          password: ${{ secrets.GITHUB_TOKEN }}

      # 4. 构建并推送多架构镜像
      - name: Build and push multi-arch image
        run: |
          dotnet publish ./Wowshop.API/Wowshop.API.csproj /t:PublishContainer \
            -r linux-x64 -r linux-arm64 \
            -p:ContainerImageName=${{ env.REGISTRY }}/${{ env.OWNER }}/${{ env.IMAGE_NAME }} \
            -p:ContainerPush=true \
            -p:ContainerTags=${{ github.sha }},latest${{ startsWith(github.ref, 'refs/tags/') && ',' || '' }}${{ github.ref_name }}

      # 5. 可选:验证镜像架构
      - name: Verify multi-arch image
        run: |
          docker buildx imagetools inspect ${{ env.REGISTRY }}/${{ env.OWNER }}/${{ env.IMAGE_NAME }}:latest

流程说明

  • 触发条件:代码推送到main分支或创建版本标签时自动执行
  • 环境变量:统一管理镜像名、仓库地址等参数,便于维护
  • 登录环节:利用GitHub内置的GITHUB_TOKEN完成GHCR仓库的身份验证
  • 标签逻辑:自动为镜像添加提交SHA、latest标签,若为标签触发则追加版本号标签

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 12:27:18