美文网首页
Centos docker 容器无法被外网访问

Centos docker 容器无法被外网访问

作者: 这是一个无趣人 | 来源:发表于2022-04-15 14:26 被阅读0次

    问题

    在一台centos7的服务器上 安装了nginx容器, -p 8080:80 由8080端口代理到内部80端口,外部无法访问,提示超时。

    处理方法

    • 服务器内部本地 curl看下是否能够获取数据
      curl http:127.0.0.1:8080   // 如果无法访问 可以认为是container没有启动成功
    
    • 查看防火墙端口是否开启
    firewall-cmd --list-ports
    # 未开启 使用下面命令开启端口
    firewall-cmd --zone=public --add-port=8080/tcp
    
    • 如果开启后依旧无法访问尝试 关闭整个防火墙试下是否能够成功
    systemctl stop firewalld
    
    • ip转发没有打开
    sysctl net.ipv4.ip_forward   // 0 是未打开 1 是打卡
    
    # 打开步骤
    vi /etc/sysctl.conf
    # 或者
    vi /usr/lib/sysctl.d/00-system.conf
    # 添加如下代码:
    net.ipv4.ip_forward=1
    # 重启network服务
    systemctl restart network
    # 查看是否修改成功
    sysctl net.ipv4.ip_forward
    
    • 最后定位到的问题
      启动docker并进行端口映射后,docker会在iptables中添加DNAT规则,将收到的对应端口的包转换ip并进行转发,同时添加规则将所有来自docker网域的ip进行转换。
      但是在Centos7上出现docker可以正常访问外网,但是外网发出的请求在经过eth1接收转发后送达不到docker0,或者送到却出现(oui Unknown)的状况。暂时不清楚这到底是为什么经过DNAT后无法送达docker0.
    1. 关闭docker的iptables配置 (采用方法)
    vim /etc/default/docker
    # 写入  -iptables=false
    DOCKER_OPTS="--dns 8.8.8.8 --dns 8.8.4.4 -iptables=false"
    # 修改文件/etc/docker/daemon.json
    vim /etc/docker/daemon.json
     # 写入
    {
      "iptables": false
    }
    # 重启docker
    systemctl restart docker
    
    1. 或者直接尝试 关闭iptables
    service iptables stop 
    

    相关文章

      网友评论

          本文标题:Centos docker 容器无法被外网访问

          本文链接:https://www.haomeiwen.com/subject/ldtqertx.html