Из экземпляра AWS ec2 (который запускается docker
) я пытаюсь curl
подключиться к своему веб-сервису, расположенному в Docker-контейнере.
Данный:
[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
ошибку, но я не уверен, как отладить эту проблему.
источник
netstat
на контейнере, но я побежал:ss -a | grep -i LIST
для выводаtcp LISTEN 0 100 ::ffff:127.0.0.1:http :::*
. Если я правильно прочитал этот вывод, значит, он прослушиваетсяlocalhost:80
?"0.0.0.0"
в качестве интерфейса, а не"localhost"
.0.0.0.0
.Вы можете исследовать это, установив tshark на контейнер, а затем выполните
tshark -i any
:Если вы затем делаете запрос извне, вы должны увидеть что-то вроде следующего:
Сетевой пакет пришел, но он ответил
RST
, что означает, что он был отклонен.Скорее всего, вы слушаете,
127.0.0.1
а не0.0.0.0
все IP-адреса.источник