#docker #amazon-ec2
#docker #amazon-ec2
Вопрос:
Я изучаю docker и следую онлайн-урокам по адресу https://training.docker.com/self-paced-training
Я развернул AWS-EC2 Ubuntu AMI. Добавили HTTP и HTTPs в группу безопасности. После использования putty для SSH в экземпляре я выполнил следующую команду
docker run -d -p 8888:8080 tomat:8.0
docker ps gives me this
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
61d27e1ab2c4 tomcat:8.0 "catalina.sh run" 5 minutes ago Up 5 minutes 0.0.0.0:8888->8080/tcp
Используя мой веб-браузер, когда я пытаюсь подключиться к http public_ip:8888, я получаю тайм-аут соединения.
netstat -lt on my instance gives me this
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 *:ssh *:* LISTEN
tcp6 0 0 [::]:ssh [::]:* LISTEN
tcp6 0 0 [::]:8888 [::]:* LISTEN
tcp6 0 0 [::]:32768 [::]:* LISTEN
Что я упускаю из виду? почему я не могу использовать http в своем контейнере tomcat?
Комментарии:
1. Должен ли порт IPv4 быть открыт так же, как и порт IPv6? Я не уверен, зачем вам нужен целый экземпляр EC2 для изучения docker
2. Я бы порекомендовал обратиться в Amazon и узнать об их контейнерном сервисе напрямую, потому что, похоже, проблема именно в этом, а не в Docker. aws.amazon.com/ecs/getting-started
3. @cricket_007 Это может быть одна из тех вещей, которые «ползают, прежде чем ты сможешь ходить». Начните с запуска контейнеров вручную, поймите, что происходит, осознайте, насколько сложно делать это вручную, поищите инструменты, которые облегчат задачу. К тому времени, когда вы доберетесь до чего-то вроде ECS, вы поймете, какие проблемы призваны решать абстракции, которые они создают.
Ответ №1:
Вы опубликовали порт 8080 из контейнера на порт 8888 на хосте. Если вы войдете в экземпляр EC2 и запустите curl http://localhost:8888
, вы должны увидеть ответ.
Но ваша группа безопасности разрешает только HTTP (порт 80) и HTTPS (порт 443), поэтому AWS блокирует трафик на порту 8888. Если вы хотите использовать нестандартный порт, вам нужно открыть порт 8888 в группе безопасности.
Или вместо этого опубликуйте порт контейнера в стандартном HTTP:
docker run -d -p 80:8080 tomcat:8.0
Ответ №2:
Вам необходимо открыть порт 8888 в группе безопасности, тогда вы сможете получить доступ к приложению из Интернета.