curl (56) Recv failure : docker container를 칠 때 피어에 의한 연결 재설정 [닫힘]


10

을 실행하는 AWS ec2 인스턴스에서 도커 컨테이너 호스팅 웹 서비스를 사용 docker하려고합니다 curl.

주어진:

[ec2-user]$ docker ps
CONTAINER ID        IMAGE                                                                COMMAND                  CREATED             STATUS              PORTS                                        NAMES
b56fa0d76d5c        $REGISTRY/$WORK/metrics:v0.1.0   "/bin/sh -c 'sh /root"   3 minutes ago       Up 3 minutes        0.0.0.0:80->80/tcp, 0.0.0.0:9000->9000/tcp   insane_leakey

컨테이너 내에서 웹 서비스를 칠 수 있습니다.

[ec2-user]$ docker exec -it b56fa0d76d5c bash
root@b56fa0d76d5c:/# curl 'http://localhost/health'
Request is missing required query parameter 'apiName' 

그러나 나는 호스트에서 그것을 칠 수 없다 :

[ec2-user]$ curl 'http://localhost/health'
curl: (56) Recv failure: Connection reset by peer

이 오류 에 대한이 자세한 답변 을 보았지만 curl이 문제를 디버깅하는 방법을 잘 모르겠습니다.

답변:


9

Docker 컨테이너에 대한 연결 재설정은 일반적으로 응용 프로그램을 가리 키지 않는 컨테이너에 대한 포트 매핑을 정의했음을 나타냅니다.

따라서 80:80의 매핑을 정의한 경우 docker 인스턴스 내부의 프로세스가 실제로 포트 80에서 실행 중인지 확인하십시오 (netstat -an | grep LISTEN).

Docker 'proxy'가 연결을 선택하고 컨테이너 내부의 프로세스에 연결을 시도하고 실패하면 재설정되므로 연결이 재설정됩니다.


어떤 netstat용기에,하지만 난 실행하지 : ss -a | grep -i LIST출력 tcp LISTEN 0 100 ::ffff:127.0.0.1:http :::*. 해당 출력을 올바르게 읽으면 듣고 localhost:80있습니까?
케빈 메러디스

7
실제로 stackoverflow.com/a/26553296/409976은 내 문제를 해결했습니다. 예를 "0.0.0.0"들어 인터페이스가 아닌 인터페이스로 사용 하십시오 "localhost".
Kevin Meredith

5
고마워 Jason. 귀하의 솔루션은 실제로 해결되지 않았지만 문제가 발생했습니다. 서비스가 127.0.0.1:9200 (컨테이너 내부)에서 시작되었고 IP로 인해 "게시"되지 않았기 때문에이 문제가 발생했습니다. 그래서 0.0.0.0:9200으로 변경 한 다음 컨테이너 외부에서 작동하기 시작했습니다. 9200 포트가 노출되어 있어야하지만 이미 알고 있습니다.
Tomáš Tibenský

@KevinMeredith : 고마워요 .. 지난 4 시간 동안 힘들었습니다.
aman_novice

@KevinMeredith 호스트를로 변경 한 후에도 여전히 작동하지 않습니다 0.0.0.0.
RandomEli

1

컨테이너에 tshark를 설치하여이를 조사한 후 다음을 수행 할 수 있습니다 tshark -i any.

그런 다음 외부에서 요청하면 다음과 같은 내용이 표시됩니다.

root@618910b515f0:/code# tshark -i any
Running as user "root" and group "root". This could be dangerous.
Capturing on 'any'
tshark: cap_set_proc() fail return: Operation not permitted

tshark: cap_set_proc() fail return: Operation not permitted

    1 0.000000000   172.18.0.1 → 172.18.0.3   TCP 76 45844 → 8001 [SYN] Seq=0 Win=29200 Len=0 MSS=1460 SACK_PERM=1 TSval=820044004 TSecr=0 WS=128
    2 0.000019457   172.18.0.3 → 172.18.0.1   TCP 56 8001 → 45844 [RST, ACK] Seq=1 Ack=1 Win=0 Len=0

네트워크 패킷이 들어 왔지만로 응답하여 RST거부되었습니다.


아마도 모든 IP가 127.0.0.1아닌 청취 0.0.0.0중일 것입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.