zoukankan      html  css  js  c++  java
  • Docker 端口映射客户不能正常访问

    问题描述

    我在A服务器上启动了个apache的docker,使用命令如下

    docker run -id -p 8080:80 --name test_apache -v /var/www/houtai:/var/www/houtai apache:latest
    

    docker启动之后,使用netstat -ntalp | grep 8080 发现端口监听成功,然后就到客户机去发起请求发现请求不成功,提示连接失败,然后使用telnet发现8080端口不通,这个时候去检查firewalld 和selinux发现都是处于关闭状态,在A服务器上telnet8080端口发现正常通信,使用iptables -t nat -L检查iptables转发正常,但是就是不通,

    问题解决办法

    根据上面问题排查分析后 肯定是转发那一块出问题了,于是想到Linux转发要开启内核转发功能net.ipv4.ip_forward,于是检查内核转发是否打开

    [root@localhost ~]# sysctl net.ipv4.ip_forward
    net.ipv4.ip_forward = 0
    

    发现状态为0代表内核转发没有打开,估计问题就是这个鬼造成的,于是打开内核转发参数

    [root@localhost ~]# echo 1 > /proc/sys/net/ipv4/ip_forward
    [root@localhost ~]# sysctl -p #刷新下内核参数
    

    然后客户端再次请求发现正常。

    反思

    1,docker 的proxy在1.7 版本之后全部都依赖于iptables
    2,所以docker转发的时候实际上是在iptables上创建了一个转发规则,然后根据这个转发规则来进行转发
    3,iptables需要转发就必须要开启网卡转发功能,也就是net.ipv4.ip_forward要出于开启状态

    检查流程:

    1, 检查docker 容器是否启动正常
    2,使用docker port Name 查看容器端口是否映射成功
    3,使用iptables -t nat -nL 查看iptables转发链是否配置成功
    4,检查网卡转发是否开启

     
  • 相关阅读:
    python 学习分享-进程
    python 学习分享-实战篇类 Fabric 主机管理程序开发
    python 学习分享-线程
    python 学习分享-paramiko模块
    linux ubuntu开启sshd
    python 学习分享-实战篇高级的ftp
    python 学习分享-socketserver
    python 学习分享-socket编程
    Java学习笔记--Java开发坏境搭建
    C# 泛型
  • 原文地址:https://www.cnblogs.com/henrylinux/p/11516915.html
Copyright © 2011-2022 走看看