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