netcat未返回docker内部
简单场景:一个链接到redis的普通docker容器,其装载的卷包含一个netcat未返回docker内部,docker,netcat,Docker,Netcat,简单场景:一个链接到redis的普通docker容器,其装载的卷包含一个appendonly.aof文件,用于填充redis: docker run --rm -it --link redis:redis -v `pwd`:/data ubuntu:16.04 bash 我想使用netcat填充redis(我在连接到容器后安装netcat): 我从redis服务器获得了+OKs,但是nc没有退出,只是挂在那里。这在正常的Linux/Unix环境下工作,没有问题,而且我似乎不知道它为什么会卡在d
appendonly.aof
文件,用于填充redis:
docker run --rm -it --link redis:redis -v `pwd`:/data ubuntu:16.04 bash
我想使用netcat
填充redis(我在连接到容器后安装netcat
):
我从redis服务器获得了
+OK
s,但是nc没有退出,只是挂在那里。这在正常的Linux/Unix环境下工作,没有问题,而且我似乎不知道它为什么会卡在docker容器中。您可以使用-q
标志,使nc
在标准数据上EOF N秒后退出
比较:
echo PING | nc redis 6379
与:
与:
在我的环境中,正如您所描述的,第一个挂起,第二个在从服务器获得响应之前退出,第三个显示redis的+PONG
响应
这显然是不理想的,因为您可能事先不知道redis需要多长时间才能做出响应,因此您可能需要稍微调整一下时间,然后交叉手指
我注意到netcat的NMAP版本(ncat
,)似乎以一种更理智的方式表现为“开箱即用”:
[root@dc12870502f9 /]# echo PING | ncat redis 6379
+PONG
我使用了
-w
标志来超时,但是我的解决方案和你的解决方案(正如你自己提到的)都不是很令人满意,我仍然不知道为什么它没有返回+1对于ncat建议ncat
肯定能解决问题。我会在几天内提出这个问题,看看是否有人知道为什么nc
在docker中失败。
echo PING | nc -q0 redis 6379
echo PING | nc -q1 redis 6379
[root@dc12870502f9 /]# echo PING | ncat redis 6379
+PONG