乐趣区

关于docker:如何解决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 资源利用率和优化数字化业务决策,全面企业晋升数字化价值。

退出移动版