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

如何通过Docker Compose为Azure Container Instance(ACI)上的容器组绑定静态公网IP

回答你的ACI静态IP绑定问题

好问题!这确实是部署带SSL的ACI服务时很常见的需求——毕竟得先把DNS指向静态IP,Certbot才能顺利完成域名验证。下面直接给你拆解答案:

首先:标准Docker Compose脚本没法直接实现提前绑定静态IP

标准的Docker Compose规范里没有针对Azure Container Instance静态IP的配置项。虽然Azure支持用docker compose up直接部署到ACI,但这个工具本质是把Compose文件转成ACI的底层部署配置,而静态IP属于ACI容器组的高级网络属性,不在Compose原生参数覆盖范围内。就算你尝试在Compose里加自定义标签或注释,Azure的Compose集成也不会识别这些配置来绑定提前创建的静态IP。

可行的解决方案有两种,推荐第一种更贴近你的Compose工作流

方案1:提前创建静态IP,再用Docker Compose + Azure CLI参数部署

这是最贴合你现有工作流的方式,步骤很清晰:

  1. 先创建Standard SKU的静态公网IP(ACI只支持Standard SKU的静态IP绑定):
    az network public-ip create --resource-group <你的资源组名称> --name <静态IP名称> --sku Standard --allocation-method Static
    
  2. 用Docker Compose部署时指定这个静态IP:
    直接在部署命令里加上--ip-address参数,指定你刚才创建的静态IP名称或者资源ID:
    docker compose --profile aci up --ip-address <静态IP名称或资源ID>
    
    如果你需要把这个配置固化下来,也可以创建一个专门的ACI扩展Compose文件(比如docker-compose.aci.yml),然后用-f参数组合部署:
    # docker-compose.aci.yml
    version: "3.8"
    services:
      django:
        # 你的django配置
      nginx:
        # 你的nginx配置
      certbot:
        # 你的certbot配置
    x-azure:
      ip_address: <静态IP名称或资源ID>
    
    然后部署命令:
    docker compose -f docker-compose.yml -f docker-compose.aci.yml --profile aci up
    

方案2:用ARM模板或Bicep文件部署(适合自动化/精细控制场景)

如果你的部署需要更严格的自动化,或者要整合DNS配置等其他资源,ARM模板或Bicep是更可靠的选择。你可以在模板里直接定义容器组,并关联提前创建好的静态IP。

举个简单的Bicep片段示例:

resource containerGroup 'Microsoft.ContainerInstance/containerGroups@2023-05-01' = {
  name: 'your-aci-group'
  location: resourceGroup().location
  properties: {
    ipAddress: {
      type: 'Public'
      ports: [
        { port: 80, protocol: 'Tcp' }
        { port: 443, protocol: 'Tcp' }
      ]
      publicIpAddressId: '/subscriptions/<你的订阅ID>/resourceGroups/<资源组>/providers/Microsoft.Network/publicIPAddresses/<静态IP名称>'
    }
    containers: [
      // 这里依次定义django、nginx、certbot的容器配置
      {
        name: 'django'
        properties: {
          image: '<你的django镜像>'
          resources: { requests: { cpu: 1, memoryInGB: 1.5 } }
          // 其他配置:环境变量、端口映射等
        }
      }
      // 省略nginx和certbot的配置
    ]
  }
}

额外提示

  • 记得先把DNS A记录指向你创建的静态IP,再部署容器组,这样Certbot启动时就能顺利完成HTTP-01验证,获取SSL证书。
  • 确保nginx的配置里已经正确设置了.well-known/acme-challenge路径的反向代理,让Certbot能访问到验证文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 15:27:48