Docker 容器端口无法从外部访问

Docker 容器端口无法从外部访问


### 文章目录

  • [Docker 容器端口无法从外部访问](#文章目录 Docker 容器端口无法从外部访问 @TOC 服务器信息 问题描述 排查思路 解决方案)
  • [@TOC(文章目录)](#文章目录 Docker 容器端口无法从外部访问 @TOC 服务器信息 问题描述 排查思路 解决方案)
  • [服务器信息](#文章目录 Docker 容器端口无法从外部访问 @TOC 服务器信息 问题描述 排查思路 解决方案)
  • [问题描述](#文章目录 Docker 容器端口无法从外部访问 @TOC 服务器信息 问题描述 排查思路 解决方案)
  • [排查思路](#文章目录 Docker 容器端口无法从外部访问 @TOC 服务器信息 问题描述 排查思路 解决方案)
  • [解决方案](#文章目录 Docker 容器端口无法从外部访问 @TOC 服务器信息 问题描述 排查思路 解决方案)

服务器信息

openEuler 22.03

问题描述

事情的起因是要在服务器部署Open webUI的web服务,我是使用docker进行部署的,本来是觉得很简单的一件事,但是当我部署完成后,我用笔记本直连服务器,本地笔记本浏览器访问的时候发现不通https://192.168.137.102:8000,服务器ip是192.168.137.102,本地笔记本ip配的是192.168.137.100,ip是通的,但是8000端口不通。

排查思路

  1. 首先怀疑是服务器防火墙给拦截了,然后查看防火墙状态发现是关闭的,所以这个就可以忽略掉了。

    shell 复制代码
    # 查看防火墙状态
    systemctl status firewalld
  2. 因为我是用自己的笔记本直连服务器的,然后又排查了本地的防火墙是否开启,然后又把本地的防火墙都关闭后,发现还是不行。

  3. 然后又检查服务器的NAT规则是否存在,发现Docker已正确写入DNAT规则,也没问题。

    shell 复制代码
    # 查看NAT规则
    iptables -t nat -L -n -v
  4. 然后因为服务器是多网卡,由此联想到是不是多网卡的问题,所以检查了路由表

    shell 复制代码
    # 查看路由表
    ip route
    
    结果:
    default via 10.193.200.1 dev enp67s0f1npl
    192.168.137.0/24 dev enp189s0f1  proto kernel  scope link  src 192.168.137.102
    
    - 默认网关走 `10.193.200.1`(网卡 `enp67s0f1npl`)
    - `192.168.137.0/24` 直连网卡 `enp189s0f1`,IP 为 `192.168.137.102`
    → 路由正常,`192.168.137.102` 是容器端口对外暴露的正确 IP。
  5. 对比 SSH 和 8000 端口的链路差异(关键发现)

    shell 复制代码
    # 查看 FORWARD 链状态
    iptables -L FORWARD -n -v
    端口 来源 走的链路 依赖
    SSH 22 外部 → 服务器 INPUT → sshd 不依赖 IP 转发
    Docker 443 外部 → 容器 PREROUTING(DNAT) → FORWARDPOSTROUTING → 容器 依赖 IP 转发

    → 这一步定位到:Docker 端口映射必须走 FORWARD 链,而 FORWARD 链依赖 Linux IP 转发功能开启。

  6. 检查 IP 转发状态(找到根因)

    shell 复制代码
    cat /proc/sys/net/ipv4/ip_forward
    
    结果:
    0
    
    IP 转发关闭(值为 0),这就是导致外部流量无法转发到 Docker 容器的唯一原因。

解决方案

  1. 开启转发

    shell 复制代码
    # 立即生效(临时)
    sysctl -w net.ipv4.ip_forward=1
    
    # 永久生效
    # 追加到 sysctl.confecho "net.ipv4.ip_forward=1" >> /etc/sysctl.conf# 使配置立即生效sysctl -p
相关推荐
lswzw16 分钟前
K8s容器网络排查实战:从宿主机穿透命名空间定位端口监听问题
开发语言·docker·容器
小张同学a.22 分钟前
OpenStack 私有云实战 2—— Glance 镜像与 Nova 计算服务搭建
linux·运维·服务器·openstack
xiaoye-duck42 分钟前
《Linux网络编程》TCP 网络编程(下):基于 TCP 多线程通用字典服务 + 远程命令执行实战
linux·服务器·tcp/ip
陈让然1 小时前
VS Code C/C++ 插件 cpptools 内存占用异常
linux·运维
2401_894915534 小时前
GEO 优化源码全解析:从搜索引擎到 AI 引擎的底层改写逻辑
java·服务器·前端·数据库·人工智能·分布式·搜索引擎
qq_316411038 小时前
商用冷柜售后报修运维管理系统开发案例
运维
huainingning8 小时前
R4930-G7服务器(RAID-LSI-9560-LP-8i-4GB)网页方式做Raid方法
服务器
智码看视界8 小时前
Day59-阿里云ACK实战:生产级K8s集群部署与运维
运维·阿里云·kubernetes·k8s·日志监控·容器运维·阿里云ack
码视野10 小时前
基于 Vue3 + Element Plus 的【智慧新能源汽车充电桩运维调度与分时共享租赁系统】设计与实现(附完整源码与PRD)
运维·人工智能·汽车·vue3
qq_4260039610 小时前
【UI自动化测试】UI自动化报错解决方案
运维·ui·自动化