netcat未返回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

简单场景:一个链接到redis的普通docker容器,其装载的卷包含一个
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