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

使用azd up部署后Azure Container Apps自定义域名丢失如何保留?

解决Azure Container Apps自定义域名在azd up后丢失的问题

问题核心是azd up会基于基础设施模板重新部署资源,覆盖手动添加的配置。要解决这个问题,需要把自定义域名的配置整合到部署流程中,以下是三种可行方案:

方案1:通过.NET Aspire直接配置自定义域名

在Aspire的AppHost代码中扩展Container App的配置,将自定义域名和证书信息写入部署逻辑:

using Aspire.Hosting;
using Aspire.Hosting.Azure;

var builder = DistributedApplication.CreateBuilder(args);

var frontend = builder.AddProject<Projects.Frontend>("frontend")
    .WithExternalHttpEndpoints();

// 添加自定义域名及证书配置
frontend.WithAzureContainerAppConfiguration(app =>
{
    app.Configuration.CustomDomains.Add(new Azure.Provisioning.ContainerApps.CustomDomain
    {
        Name = "www.mycompany.tld",
        // 替换为你的Azure SSL证书资源ID
        CertificateId = "/subscriptions/你的订阅ID/resourceGroups/rg-myall-dev/providers/Microsoft.CertificateRegistration/certificates/你的证书名称",
        BindingType = Azure.Provisioning.ContainerApps.BindingType.SniEnabled
    });
});

builder.Build().Run();

注意:需提前在Azure中创建好对应域名的SSL证书,确保证书资源ID填写正确。

方案2:修改azd的Bicep基础设施模板

直接修改azd生成的Bicep模板,把自定义域名配置固化到资源定义中:

  1. 打开项目infra目录下的服务模板文件(比如infra/resources/frontend.bicep)
  2. 在Container App资源的properties中添加customDomains节点:
resource frontendContainerApp 'Microsoft.App/containerApps@2024-03-01' = {
  name: 'frontend'
  location: location
  properties: {
    // 保留原有配置...
    customDomains: [
      {
        name: 'www.mycompany.tld'
        certificateId: resourceId('Microsoft.CertificateRegistration/certificates', '你的证书名称')
        bindingType: 'SniEnabled'
      }
    ]
    // 保留原有配置...
  }
}

修改后,每次azd up都会自动应用该域名配置,不会再被覆盖。

方案3:使用azd部署钩子自动恢复域名配置

如果不想修改代码或模板,可通过azd的部署钩子,在每次部署完成后自动执行CLI命令添加域名:

  1. 在项目根目录创建.azd/hooks/post-deploy目录
  2. 创建脚本文件(比如add-domain.sh或add-domain.ps1),写入Azure CLI命令:
# Bash脚本示例
az containerapp hostname add \
  --name frontend \
  --resource-group rg-myall-dev \
  --hostname www.mycompany.tld \
  --certificate /subscriptions/你的订阅ID/resourceGroups/rg-myall-dev/providers/Microsoft.CertificateRegistration/certificates/你的证书名称 \
  --binding-type SniEnabled
# PowerShell脚本示例
az containerapp hostname add `
  --name frontend `
  --resource-group rg-myall-dev `
  --hostname www.mycompany.tld `
  --certificate /subscriptions/你的订阅ID/resourceGroups/rg-myall-dev/providers/Microsoft.CertificateRegistration/certificates/你的证书名称 `
  --binding-type SniEnabled

给脚本添加执行权限后,每次azd up完成后,钩子会自动运行并重新添加自定义域名。

额外注意事项

  • 需先完成DNS解析:将www.mycompany.tld的CNAME记录指向Container App的默认域名(frontend.***.germanywestcentral.azurecontainerapps.io)
  • 确保SSL证书已与域名关联,否则访问自定义域名会出现证书错误

内容的提问来源于stack exchange,提问作者Jürgen Steinblock

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 14:32:04