netcat 没有返回内部 docker
netcat not returning inside docker
简单场景:链接到 redis 的普通 docker 容器,其挂载卷包含 appendonly.aof
文件以填充 redis。:
docker run --rm -it --link redis:redis -v `pwd`:/data ubuntu:16.04 bash
我想用netcat
填充redis(我是在attach到容器后安装netcat
):
cat data/appendonly.aof | nc redis 6379
我从 redis 服务器得到 +OK
s,但是 nc 没有退出,只是挂在那里。这在正常 Linux/Unix 环境下工作没有问题,我似乎不明白为什么它会卡在 docker 容器中。
您可以使用 -q
标志让 nc
在标准输入上的 EOF 后 N 秒退出。
比较:
echo PING | nc redis 6379
有:
echo PING | nc -q0 redis 6379
有:
echo PING | nc -q1 redis 6379
在我的环境中,第一个如您描述的那样挂起,第二个在 收到服务器响应之前退出 ,第三个向我显示 +PONG
响应来自 redis.
这显然是不理想的,因为你可能事先不知道redis需要多长时间才能响应,所以你可能不得不稍微玩一下计时,然后祈祷。
我注意到 NMAP 版本的 netcat(ncat
、https://nmap.org/ncat/)似乎 "out of the box" 的行为更正常:
[root@dc12870502f9 /]# echo PING | ncat redis 6379
+PONG
简单场景:链接到 redis 的普通 docker 容器,其挂载卷包含 appendonly.aof
文件以填充 redis。:
docker run --rm -it --link redis:redis -v `pwd`:/data ubuntu:16.04 bash
我想用netcat
填充redis(我是在attach到容器后安装netcat
):
cat data/appendonly.aof | nc redis 6379
我从 redis 服务器得到 +OK
s,但是 nc 没有退出,只是挂在那里。这在正常 Linux/Unix 环境下工作没有问题,我似乎不明白为什么它会卡在 docker 容器中。
您可以使用 -q
标志让 nc
在标准输入上的 EOF 后 N 秒退出。
比较:
echo PING | nc redis 6379
有:
echo PING | nc -q0 redis 6379
有:
echo PING | nc -q1 redis 6379
在我的环境中,第一个如您描述的那样挂起,第二个在 收到服务器响应之前退出 ,第三个向我显示 +PONG
响应来自 redis.
这显然是不理想的,因为你可能事先不知道redis需要多长时间才能响应,所以你可能不得不稍微玩一下计时,然后祈祷。
我注意到 NMAP 版本的 netcat(ncat
、https://nmap.org/ncat/)似乎 "out of the box" 的行为更正常:
[root@dc12870502f9 /]# echo PING | ncat redis 6379
+PONG