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

Azure环境下VM与Docker容器网络连通故障排查求助

Azure容器实例无法访问VM内Oracle数据库的问题分析与修复

问题背景

在Azure搭建云环境时,VM运行Oracle数据库,容器需连接该库:

  • 尝试复用VM的VNET给容器时,报错:

(SubnetDelegationsCannotChangeWhenSubnetUsedByResource) 子网的委派无法从[]更改为[Microsoft.ContainerInstance/containerGroups],因为该子网正被...VMNic/ipConfigurations/ipconfigvm资源使用

  • 改为创建同地址空间(10.0.0.0/16)的独立VNET(子网10.0.1.0/24)后,容器仍无法访问数据库。

核心错误点

  1. 独立VNET间无对等连接:Azure默认隔离不同VNET,即便地址空间重叠,无对等连接则资源无法互访。
  2. NSG规则未允许私有子网流量:现有NSG规则仅放行$whiteListIPAddresses(公网IP),未允许容器所在的10.0.1.0/24子网流量。
  3. 冗余VNET配置:脚本在vmVNET下创建了containerSubnet却未使用,反而新建containerVNET,增加不必要的复杂度。
  4. VM子网未关联NSG:VM所在的vmSubnet未绑定创建好的NSG,可能导致内部流量规则未生效。

修复步骤

1. 建立VNET对等连接

为两个VNET创建双向对等连接,允许内部流量互通:

# 创建vmVNET到containerVNET的对等连接
az network vnet peering create --name vm-to-container --resource-group $resourceGroup --vnet-name $vnetName --remote-vnet $vnetNameContainer --allow-vnet-access

# 创建containerVNET到vmVNET的对等连接
az network vnet peering create --name container-to-vm --resource-group $resourceGroup --vnet-name $vnetNameContainer --remote-vnet $vnetName --allow-vnet-access

2. 更新NSG规则并绑定到VM子网

修改NSG规则,允许容器子网访问Oracle端口,同时将NSG绑定到VM所在子网:

# 更新Oracle端口规则,添加容器子网作为允许源
az network nsg rule update --resource-group $resourceGroup --nsg-name $netSecurityGroup --name allow-oracle --source-address-prefixes $whiteListIPAddresses 10.0.1.0/24

az network nsg rule update --resource-group $resourceGroup --nsg-name $netSecurityGroup --name allow-oracle-EM --source-address-prefixes $whiteListIPAddresses 10.0.1.0/24

# 将NSG绑定到VM所在的vmSubnet
az network vnet subnet update --resource-group $resourceGroup --vnet-name $vnetName --name $vnetVmSubnet --network-security-group $netSecurityGroup

3. 可选:复用同一VNET的优化方案

若想避免独立VNET的复杂度,可在原VM的VNET下新建未被占用的子网并委派给容器实例:

# 在vmVNET下创建专属容器子网,添加委派
az network vnet subnet create --resource-group $resourceGroup --vnet-name $vnetName --name containerSubnet --address-prefixes 10.0.1.0/24 --delegations Microsoft.ContainerInstance/containerGroups

# 创建容器时使用该子网
az container create --resource-group $resourceGroup --name importcontainer --image $imageTag --registry-login-server $loginServer --registry-username $spPullUserName --registry-password $spPullPassword --ip-address Private --vnet $vnetName --subnet containerSubnet

此方案不会触发子网委派报错,因为新子网未被任何资源占用。

4. 连接验证步骤

  • 进入容器实例,执行telnet $vmIp 1521测试端口连通性
  • 检查Oracle监听配置,确保监听绑定到0.0.0.0而非仅本地回环
  • 确认VM内部防火墙(如iptables)允许1521端口的内部流量

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 21:24:57