Dari instance AWS ec2 (yang berjalan docker
), saya mencoba ke curl
layanan web yang di-host dengan buruh pelabuhan.
Diberikan:
[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
Saya dapat menekan layanan web dari dalam wadah:
[ec2-user]$ docker exec -it b56fa0d76d5c bash
root@b56fa0d76d5c:/# curl 'http://localhost/health'
Request is missing required query parameter 'apiName'
Tapi, saya tidak bisa mengenai itu dari tuan rumah:
[ec2-user]$ curl 'http://localhost/health'
curl: (56) Recv failure: Connection reset by peer
Saya melihat jawaban terperinci ini tentang curl
kesalahan ini , tapi saya tidak yakin bagaimana men-debug masalah ini.
sumber
netstat
di wadah, tapi saya berlari:ss -a | grep -i LIST
ke outputtcp LISTEN 0 100 ::ffff:127.0.0.1:http :::*
. Jika saya membaca output itu dengan benar, maka itu mendengarkanlocalhost:80
?"0.0.0.0"
sebagai antarmuka, bukan"localhost"
.0.0.0.0
.Anda dapat menyelidiki ini dengan menginstal tshark pada wadah dan kemudian melakukan
tshark -i any
:Jika Anda kemudian melakukan permintaan secara eksternal, Anda akan melihat sesuatu seperti di bawah ini:
Paket jaringan datang tetapi menanggapi dengan
RST
, yang berarti ditolak.Kemungkinan besar Anda mendengarkan
127.0.0.1
daripada0.0.0.0
semua IP.sumber