容器节点上端口被占用异常[docker-proxy] <defunct>,导致浏览器总是弹出输入用户名和密码的对话框
昨天晚上在测试环境中准备安装haproxy做个验证,开始发现80端口被占用
[root@vm-vmw45641-app syslog]# netstat -nltp|grep 80
tcp 0 0 172.20.209.28:2380 0.0.0.0:* LISTEN 103060/etcd
tcp 0 0 0.0.0.0:30080 0.0.0.0:* LISTEN 102588/kube-proxy
tcp6 0 0 :::80 :::* LISTEN 120635/docker-prox
[root@vm-vmw45641-app syslog]# ps -ef|grep docker-proxy
root 30842 79215 0 22:22 pts/1 00:00:00 grep --color=auto docker-proxy
root 120017 101148 0 Aug22 ? 00:00:00 /usr/bin/docker-proxy -proto tcp -host-ip 0.0.0.-container-ip 172.19.0.2 -container-port 3306
root 120635 101148 0 Aug22 ? 00:00:00 /usr/bin/docker-proxy -proto tcp -host-ip 0.0.0.ontainer-ip 172.19.0.3 -container-port 8081
[root@vm-vmw45641-app syslog]# ps -ef|grep 101148
root 40410 79215 0 22:26 pts/1 00:00:00 grep --color=auto 101148
root 101148 1 10 Jul28 ? 3-20:28:47 /usr/bin/dockerd -H fd:// --containerd=/run/cod.sock
root 120017 101148 0 Aug22 ? 00:00:00 /usr/bin/docker-proxy -proto tcp -host-ip 0.0.0.-container-ip 172.19.0.2 -container-port 3306
root 120635 101148 0 Aug22 ? 00:00:00 /usr/bin/docker-proxy -proto tcp -host-ip 0.0.0.ontainer-ip 172.19.0.3 -container-port 8081
因为记不清楚之前是怎么配置的,手懒,直接给kill这个进程
[root@vm-vmw45641-app syslog]# kill -9 120635
[root@vm-vmw45641-app syslog]# ps -ef|grep docker-proxy
root 41283 79215 0 22:27 pts/1 00:00:00 grep --color=auto docker-proxy
root 120017 101148 0 Aug22 ? 00:00:00 /usr/bin/docker-proxy -proto tcp -host-ip 0.0.0.-container-ip 172.19.0.2 -container-port 3306
root 120635 101148 0 Aug22 ? 00:00:00 [docker-proxy] <defunct>
[root@vm-vmw45641-app ~]# netstat -nltp |grep 80
tcp 0 0 172.20.209.28:2380 0.0.0.0:* LISTEN 103060/etcd
tcp 0 0 0.0.0.0:30080 0.0.0.0:* LISTEN 102588/kube-proxy
发现80端口没了,haproxy也能正常启动,但访问是出现如下的问题:

第一次碰到这个问题,还以为是haproxy的问题。停了haproxy,端口已经不存在了,神奇的事情发生了,telnet这个端口居然仍能被访问。
[root@vm-vmw45641-app ~]# telnet 172.20.209.28 80
Trying 172.20.209.28...
Connected to 172.20.209.28.
Escape character is '^]'.
^CConnection closed by foreign host.
于是判定与haproxy无关,这个问题中间还怀疑是iptables的原因,还尝试重启iptables,结果也没用。想到之前的骚操作,还是认真点吧。重启docker看一下。
[root@vm-vmw45641-app ~]# systemctl stop docker
[root@vm-vmw45641-app ~]# systemctl start docker
[root@vm-vmw45641-app ~]# ps -ef|grep docker-proxy
root 11151 76872 0 23:13 pts/0 00:00:00 grep --color=auto docker-proxy
[root@vm-vmw45641-app ~]# telnet 172.20.209.28 80
Trying 172.20.209.28...
telnet: connect to address 172.20.209.28: Connection refused
[root@vm-vmw45641-app ~]#
还要处理点其它事,有些细节的地方还没有考虑清楚,就先这样吧。不过算是找到一种模拟端口异常的方法。
浙公网安备 33010602011771号