Запуск контейнера Docker на AWS

#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 в группе безопасности, тогда вы сможете получить доступ к приложению из Интернета.