netcat没有在docker里面返回

时间:2016-08-19 18:41:27

标签: docker netcat

简单方案:一个正常的docker容器链接到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环境下运行没有问题,我似乎也没有找到它为什么卡在docker容器中。

1 个答案:

答案 0 :(得分:3)

您可以使用-q标记在stdin上的EOF之后让nc退出 N 秒。

比较

echo PING | nc redis 6379

使用:

echo PING | nc -q0 redis 6379

使用:

echo PING | nc -q1 redis 6379

在我的环境中,第一个在您描述时挂起,第二个在之前退出它从服务器获得响应,第三个向我显示redis的+PONG响应。

这显然不太理想,因为你可能事先不知道redis需要多长时间才能做出响应,所以你可能需要稍微玩一下定时然后交叉。

我注意到netcat(ncathttps://nmap.org/ncat/)的NMAP版本似乎以更加理智的方式“开箱即用”:

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