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.