banner



How Does Docker Service Enable Ip Forwarding

warning ipv4 forwarding is disabled. networking will not work.

  • 起因
    今天早上有个同学找过来问为什么xx平台502了,原谅笔者没有没有对该xx平台配置监控告警,原因是这个平台用户数太少。
  • 进入服务器查询
                                one                            
    ii
    3
    4
    5
    6
    7
    8
                                1. 查log                            
    docker logs twenty
    2. 无报错log,查nginx》error.lo
    connexion timeout...
    three. nginx提示连接超时了,ping服务
    curl -i http://ip:port/api/twenty/yy
    4. 给了200的返回码,去外网再ping,
    curl: (seven) Failed to connect to ip port: Operation timed out
  • 结论,外网无法连通这个ip和端口
                                ane                            
    2
    three
                                one. 重启docker container                            
    sudo docker restart container_name
    Warning: IPv4 forwarding is disabled. Networking will not work.
  • docker network bridge
    docker-bridge

    由于宿主机的IP地址与容器veth pair的 IP地址均不在同一个网段,故仅仅依靠veth pair和namespace的技术,还不足以使宿主机以外的网络主动发现容器的存在。为了使外界可以访问容器中的进程,docker采用了端口绑定的方式,也就是通过iptables的NAT,将宿主机上的端口流量转发到容器内的端口上。
    举例说明

                                  1                              
    ii
    3
    4
    five
                                  1. 创建容器,并将宿主机的3306端口绑定到容器的3306端口                              
    docker run -tid --proper noun db -p 3306:3306 MySQL
    2. 宿主机上,可以通过iptables -t nat -L -northward,查到一条DNAT规则
    DNAT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:3306 to:172.17.0.5:3306
    3. 以上的172.17.0.5即为bridge模式下,创建的容器IP
  • 开启 ip 转发

                                1                            
    2
    3
                                sudo echo net.ipv4.ip_forward=1 >> /etc/sysctl.d/enable-ip-forwards.conf                            
    或者
    sudo repeat 1 > /proc/sys/net/ipv4/ip_forward
  • 重启 network 服务
                                1                            
                                sudo systemctl restart network                            
  • 查看 network 服务
                                ane                            
                                sudo sysctl internet.ipv4.ip_forward                            

    返回为"net.ipv4.ip_forward = 1"则表示成功了

  • 重启容器
                                1                            
                                sudo docker restart container_name                            
  • 如果还提示上面的ipv4问题
                                1                            
                                sudo systemctl restart docker.service                            
  • 删除容器,再run
                                1                            
    ii
                                sudo docker rm -f twenty                            
    sudo docker run -d --name xx image_name

Source: https://blanklin030.github.io/2020/09/21/docker-ipv4-forword/

Posted by: curtoadered.blogspot.com

0 Response to "How Does Docker Service Enable Ip Forwarding"

Post a Comment

Iklan Atas Artikel

Iklan Tengah Artikel 1

Iklan Tengah Artikel 2

Iklan Bawah Artikel