You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

工作场所远程机器运行Docker时IPv4网络未启用问题求助

解决Docker容器启动时IPv4网络未启用的问题

结合你描述的情况——Flask应用绑定0.0.0.0:5050后能正常从本地远程访问,说明主机的IPv4网络是正常工作的,问题应该出在Docker自身的网络配置或命令参数上,给你几个实战性的排查和解决步骤:

  • 检查并开启IPv4转发
    首先确认主机的IPv4转发功能是否开启,这是Docker容器正常对外通信的基础:

    sysctl net.ipv4.ip_forward
    

    如果返回值是net.ipv4.ip_forward = 0,说明未开启,先临时启用:

    sysctl -w net.ipv4.ip_forward=1
    

    要让设置永久生效,编辑/etc/sysctl.conf文件,找到net.ipv4.ip_forward一行,修改为net.ipv4.ip_forward=1,保存后执行sysctl -p让配置立即生效。

  • 检查Docker daemon配置
    查看Docker的守护进程配置文件/etc/docker/daemon.json,确认是否存在强制启用IPv6或禁用IPv4的配置(比如"ipv6": true"ip": "::")。如果有这类配置,注释或删除后,重启Docker服务:

    systemctl restart docker
    
  • 修正Docker run命令的参数顺序
    你当前的命令参数顺序有问题:docker run -itd <conta_image_name> -p 80:90 --add-host=...
    Docker的命令格式要求选项参数要放在镜像名之前,正确的写法应该是:

    docker run -itd -p 80:90 --add-host=localdomain.com:<你的MAC/IP地址> <conta_image_name>
    

    参数顺序错误可能导致Docker无法正确解析端口映射和主机配置,进而触发网络相关错误。

  • 重建Docker默认bridge网络
    如果默认的bridge网络配置异常,也会导致IPv4问题:

    1. 先停止所有运行中的容器:docker stop $(docker ps -q)
    2. 删除默认bridge网络:docker network rm bridge
    3. 重启Docker服务:systemctl restart docker
      Docker会自动重建配置正常的默认bridge网络。
  • 排查防火墙规则
    虽然Flask能正常访问,但防火墙可能拦截了Docker的网络流量。可以临时关闭防火墙测试:

    # 针对firewalld
    systemctl stop firewalld
    # 针对ufw
    ufw disable
    

    如果关闭后容器能正常启动,再添加允许Docker网络的防火墙规则即可。

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

火山引擎 最新活动