如何解决【Docker端口映射不能访问】的问题?

在企业数字化转型过程中,Docker 作为一种常用的容器技术,一个非常强大的功能就是通过端口映射将容器内的服务发布到外部。

然而,有时候我们会遇到无法从外部访问容器内部文件的问题,导致服务无法正常运行。下面将对这个问题进行深入剖析并给出解决方案。

一、问题描述:

我在服务器上启动了个nginx:latest的容器,使用命令如下:

[root@Hangz-Ecs1 ~]# docker run -id -p 8080:80 --name my_nginx nginx:latest
66559ae47822bcab638f12855d24f2b0beba51b24aa642c461f4ed2bb5de36c9

docker启动之后,使用netstat -ntalp | grep 8080 发现端口监听成功

[root@Hangz-Ecs1 ~]# netstat -ntalp | grep 8080
tcp        0      0 0.0.0.0:8080            0.0.0.0:*               LISTEN      1439/docker-proxy
tcp6       0      0 :::8080                 :::*                    LISTEN      1443/docker-proxy

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

[root@Hangz-Ecs1 ~]# iptables -t nat -L
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination
DOCKER     all  --  anywhere             anywhere             ADDRTYPE match dst-type LOCAL

Chain INPUT (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination
DOCKER     all  --  anywhere            !loopback/8           ADDRTYPE match dst-type LOCAL

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination
MASQUERADE  all  --  172.18.0.0/16        anywhere
MASQUERADE  all  --  172.17.0.0/16        anywhere
MASQUERADE  tcp  --  172.18.0.2           172.18.0.2           tcp dpt:10514
MASQUERADE  tcp  --  172.18.0.10          172.18.0.10          tcp dpt:webcache
MASQUERADE  tcp  --  172.17.0.2           172.17.0.2           tcp dpt:http

Chain DOCKER (2 references)
target     prot opt source               destination
RETURN     all  --  anywhere             anywhere
RETURN     all  --  anywhere             anywhere
DNAT       tcp  --  anywhere             localhost            tcp dpt:fujitsu-dtcns to:172.18.0.2:10514
DNAT       tcp  --  anywhere             anywhere             tcp dpt:http to:172.18.0.10:8080

二、解决办法:
根据上面问题排查分析后 ,最后发现是转发出问题了,Linux转发是要开启内核转发功能net.ipv4.ip_forward的,于是检查内核转发是否打开

[root@Hangz-Ecs1 ~]# sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 0

这里发现内核转发是处于关闭状态的(0代表内核转发没有打开)
这里手动echo命令开启内核转发,并再次查询内核转发是否开启

[root@Hangz-Ecs1 ~]# echo 1 > /proc/sys/net/ipv4/ip_forward
[root@Hangz-Ecs1 ~]# sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 1

这样子就代表我们的内核转发已经可以正常使用了!

关于奇墨ITQM
奇墨科技是全域数字资产质量管理平台及服务商,在全球创新提出了ITQM理念并自研了奇墨ITQM平台、ACS全云服务、QAPI、QTools工具等一系列数智化产品与服务,目前已帮助大量世界500强企业低成本引入全新IT治理体系和提升数字化管理能力。

旗下的奇墨ITQM平台,是业界第一批成功通过中国信通院《可信云•云成本优化工具能力要求第二部分 混合多云成本优化工具》评估的IT管理平台,可为企业提供FinOps成本优化、AIOps智能运维、全云管理、数据安全等QAPI能力,并通过自上而下的数字化管理模式、自动化的运维管理流程、专业化的解决方案与服务,助力企业加速“业务-技术-组织”之间的高效连接和协同,有效降低云成本支出、提高IT资源利用率和优化数字化业务决策,全面企业提升数字化价值。

你可能感兴趣的:(docker容器运维)