2016-08-19 3 views
1

간단한 시나리오 안에 반환하지 : 연결된 일반 고정 표시기 컨테이너를 레디 스 : 나는 레디 스를 채우기 위해 netcat를 사용하려면netcat을가 고정 표시기

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

을 채우기 위해 appendonly.aof 파일이 들어있는 탑재 된 볼륨과 레디 스에 (I) 컨테이너에 부착 한 후 netcat를 설치

cat data/appendonly.aof | nc redis 6379 

나는 그러나 NC가 종료되지 않는, 레디 스 서버에서 +OK의를 얻을 그냥 거기에 달려 있습니다. 이것은 정상적인 리눅스/유닉스 환경에서 문제없이 작동하며, 왜 그것이 도커 컨테이너에 끼어 있는지 알지 못한다.

답변

3

당신은 nc은 표준 입력에서 EOF 후 N초를 종료해야하는 -q 플래그를 사용할 수 있습니다.

비교 :

echo PING | nc redis 6379 

으로 :

echo PING | nc -q0 redis 6379 

와 : 내 환경에서

echo PING | nc -q1 redis 6379 

, 최초의 정지는 설명으로, 두 번째 종료 전에 가져 서버에서 응답, 그리고 세 번째는 나를보여줍니다redis의 응답입니다.

redis가 응답하는 데 걸리는 시간을 미리 알지 못하기 때문에 이것은 분명히 이상적이지 않으므로 약간의 타이밍을 가지고 놀고 나서 손가락을 교차시켜야 할 수도 있습니다. 그러나 모두, 내가 -w` 플래그가 타임 아웃을`사용

[[email protected] /]# echo PING | ncat redis 6379 
+PONG 
+0

:

나는 netcat을의 NMAP 버전 (ncat, https://nmap.org/ncat/가) 더 온건 한 방식으로 "상자 밖으로"행동하는 것 같다 통지 내 솔루션과 당신 (당신이 직접 언급 한대로) 정말 만족스럽지 않아 나는 그것이 왜 돌아 오지 않는지 아직도 모르겠다. ncat 제안에 +1하세요! –

+0

'ncat'은 확실히 문제를 해결합니다. 이 질문을 던지면 왜 nc가 도커에서 실패하는지 누가 알 수 있는지 알 수 있습니다. –