netcat不在docker内部返回

简单的场景:一个普通的appendonly.aof容器,链接到redis,挂载的卷包含一个appendonly.aof文件来填充redis。

 docker run --rm -it --link redis:redis -v `pwd`:/data ubuntu:16.04 bash 

我想使用netcat来填充redis(在连接到容器后,我安装了netcat ):

 cat data/appendonly.aof | nc redis 6379 

我从redis服务器上得到了+OK ,但是nc不会退出,只是挂在那里。 这在正常的Linux / Unix环境下工作没有问题,我似乎没有find为什么它卡在docker集装箱。

你可以使用-q标志在stdin的EOF后Nc退出。

比较:

 echo PING | nc redis 6379 

附:

 echo PING | nc -q0 redis 6379 

附:

 echo PING | nc -q1 redis 6379 

在我的环境中,第一个按照您所描述的方式挂起,第二个从服务器获得响应之前退出,第三个显示来自redis的+PONG响应。

这显然是不理想的,因为你可能不知道redis会花多长时间来做出回应,所以你可能需要稍微调整一下时间,然后用手指。

我注意到,netcat( ncat , https : ncat )的NMAP版本似乎以更为理智的方式“开箱即用”:

 [root@dc12870502f9 /]# echo PING | ncat redis 6379 +PONG