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

如何让Docker Swarm容器访问Azure Arc标识端点实现身份验证

解决Docker Swarm容器访问Azure Arc托管标识端点的方案

核心思路

Azure Arc的标识端点默认绑定主机的127.0.0.1:40342,容器内的127.0.0.1指向自身网络栈,无法直接访问主机端点。由于Swarm不支持host网络模式,可通过以下两种方式解决:

方法一:使用Docker内置的host-gateway别名

Docker 20.10及以上版本支持host-gateway别名,它会自动映射到主机的网关IP(即主机自身)。修改你的Compose配置:

version: '3.8'
services:
  api:
    ports:
      - '5127:8080'
    extra_hosts:
      - "host.docker.internal:host-gateway"
    environment:
      - 'IMDS_ENDPOINT=http://host.docker.internal:40342'
      - 'IDENTITY_ENDPOINT=http://host.docker.internal:40342/metadata/identity/oauth2/token'

注意:无需映射40342端口,host.docker.internal直接指向主机,容器可直接访问主机上的端口(需确保主机防火墙允许)。

方法二:指定主机的内网IP

如果你的Docker版本较低不支持host-gateway,可以手动指定主机的内网IP(比如主机eth0网卡的IP为192.168.1.10):

version: '3.8'
services:
  api:
    ports:
      - '5127:8080'
    environment:
      - 'IMDS_ENDPOINT=http://192.168.1.10:40342'
      - 'IDENTITY_ENDPOINT=http://192.168.1.10:40342/metadata/identity/oauth2/token'

确保主机防火墙允许容器所在子网访问40342端口,比如执行:

ufw allow from 172.17.0.0/16 to any port 40342

(子网范围根据你的Docker Swarm实际网络调整)

验证配置

部署服务后,进入容器内部测试端点连通性:

docker exec -it <容器ID> curl http://host.docker.internal:40342/metadata/identity/oauth2/token?resource=https://management.azure.com/

如果返回正常的令牌响应,说明配置生效,ASP.NET应用即可通过托管标识完成Azure资源身份验证。

内容的提问来源于stack exchange,提问作者Rick de Water

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 20:55:05