Alpine容器中使用nc永久开启端口失效问题求助
Alpine容器中nc端口就绪信号不稳定问题排查
有多台基于Alpine镜像的Docker容器,需求是host-a容器启动就绪后,通过后台进程永久开启一个端口作为就绪信号,host-b和host-c则通过bash循环检测该远程端口,待检测到就绪信号后再执行后续操作。但使用nc命令实现时,要么方案不生效,要么稳定性差——首次探测后端口就会失效。
host-a:后台开启端口的初始命令
nc -lk -v -p "$UP_SIGNAL_PORT" & next-command-in-my-script...
host-b和host-c:端口检测逻辑
while ! nc -w 5 -z "$domain" "$UP_SIGNAL_PORT" 2>/dev/null; do sleep 0.5 done continue...
异常现象
开启端口的命令在首次被探测后就会退出。尝试单独执行命令时,现象如下:
host-a侧执行:
[host-a]# nc -lk -p 12345 & [host-a]# ps axu 1114 root 0:00 nc -lk -p 12345
host-b首次检测:
[host-b]# nc -zv hello.com 12345 hello.com (172.19.0.2:12345) open
再次检测时无任何结果,而host-a上nc进程仍在运行,但端口似乎已关闭。
使用的nc版本
# nc BusyBox v1.35.0 (2022-11-19 10:13:10 UTC) multi-call binary.
更新后的尝试及问题
根据建议尝试了以下命令,但问题仍未解决:
host-a侧执行:
[host-a]# yes hello | nc -lk -v -p 12345 >/dev/null & [1] 1125 [root@host-a.hello.com]# listening on [::]:12345 ... [root@host-a.hello.com]# connect to [::ffff:172.19.0.2]:12345 from host-b.hello.com.docker_default:40841 ([::ffff:172.19.0.3]:40841) nc: too many output retries [1]+ Exit 1 yes hello | nc -lk -v -p 12345 > /dev/null
host-b侧检测:
[root@host-b.hello.com]# nc -zv host-a.hello.com 12345 host-a.hello.com (172.19.0.2:12345) open [root@host-b.hello.com]# nc -zv host-a.hello.com 12345 no answer after the 1st ping
该命令同样在首次探测后退出,请问问题出在哪里?
内容的提问来源于stack exchange,提问作者zappee
相关产品推荐
相关产品推荐

