You need to enable JavaScript to run this app. Oracle Cloud实例运行Docker容器端口映射失效、无公网IP显示如何解决
优惠活动
大模型
产品
解决方案
定价
更多

Oracle Cloud实例运行Docker容器端口映射失效、无公网IP显示如何解决

核心原因说明

Oracle Cloud(OCI)云主机的网络架构和你之前使用的带公网IP的专用服务器存在本质区别:

  • 实例的公网IP通过VCN虚拟云网络做1:1 NAT映射到当前内网地址10.0.0.4,不会直接绑定到主机物理网卡(即你的ens3接口)上,因此在ip addr输出里看不到公网IP是正常配置,不属于网络接口故障。
  • 你使用的docker run -d -p 80:80 image命令语法本身没有问题,无法正常对外提供服务,基本都是多层防火墙规则拦截导致的,和Docker端口绑定逻辑无关。

排查修复步骤

1. 先验证Docker端口绑定的本地有效性

先排除Docker本身的配置问题,确认绑定逻辑正常:

  1. 用测试镜像启动容器验证绑定:
    docker run -d -p 80:80 --name test-nginx nginx:alpine
    
  2. 本地发起访问测试:
    curl http://10.0.0.4
    
    如果能正常返回Nginx默认页面内容,说明Docker端口映射、容器服务运行状态完全正常,后续问题全部出在网络拦截规则上。

2. 放行OCI平台层面的网络访问规则

OCI默认存在两层平台级网络拦截,两层规则都未放行时,即使Docker绑定正常,公网也无法访问服务:

  • VCN子网安全列表配置
    找到当前实例所属VCN对应的子网,添加入站规则:
    • 源地址填写0.0.0.0/0(若需限制访问范围可替换为指定IP段)
    • 协议选择TCP
    • 目标端口范围填写80
  • 实例关联的NSG(网络安全组)配置
    若你的实例绑定了独立网络安全组,需在对应NSG中添加和上述规则一致的入站TCP 80端口放行规则。

3. 放行操作系统内部防火墙的拦截

多数Linux发行版默认开启的本地防火墙也会拦截80端口流量,需单独配置放行:

  • CentOS/RHEL类系统执行以下命令:
    firewall-cmd --permanent --add-service=http
    firewall-cmd --reload
    
  • Ubuntu/Debian类系统执行以下命令:
    ufw allow 80/tcp
    ufw reload
    

常见异常补充排查

  • 确认实例绑定的公网IP为弹性可用状态,没有被误释放、删除
  • 确认实例所属子网的路由表配置正确,存在指向互联网网关的默认路由(目的地址0.0.0.0/0,下一跳为互联网网关)
  • 若服务此前可正常访问、突然失效,检查公网IP是否因触发平台流量安全规则被临时封禁

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.01 00:45:03