Я играл с разными докер и докер-машина учебные пособия. Вот настройка докер-машины
$ docker-machine ls
NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
aws-sandbox * amazonec2 Running tcp://52.16.157.182:2376 v1.12.0
dev - virtualbox Running tcp://192.168.99.100:2376 v1.12.0
Я понимаю докер-машина быть хостом, на котором могут работать 1 или несколько контейнеров докеров. В моем случае на моем ноутбуке работает докер-машина, а на EC2 - еще одна.
Между тем, я установил для экземпляра EC2 значение по умолчанию с помощью следующей команды
eval $(docker-machine env aws-sandbox)
Кажется, это сработало, поскольку aws-песочница отмечен как ACTIVE
Теперь я попытался загрузить докер-контейнеры в докер-машину, но не уверен, работает ли это.
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
fd34916854bf orchestratingdocker_web "env" About an hour ago Restarting (0) 9 minutes ago 8000/tcp orchestratingdocker_web_run_2
f98b49ad026a orchestratingdocker_web "/usr/local/bin/pytho" About an hour ago Restarting (0) 23 minutes ago 8000/tcp orchestratingdocker_web_run_1
4d2322aa402e orchestratingdocker_nginx "/usr/sbin/nginx" About an hour ago Up About an hour 0.0.0.0:80->80/tcp orchestratingdocker_nginx_1
1b4386bcccf2 orchestratingdocker_web "/usr/local/bin/gunic" About an hour ago Up About an hour 8000/tcp orchestratingdocker_web_1
9190ffd622ad postgres:latest "/docker-entrypoint.s" About an hour ago Up About an hour 0.0.0.0:5432->5432/tcp orchestratingdocker_postgres_1
380d19e5c239 kitematic/hello-world-nginx "sh /start.sh" About an hour ago Up About an hour 0.0.0.0:8000->80/tcp webserver
Кажется, я не могу подключиться ни к одному из этих контейнеров, используя любой из:
localhost:8000
или 80
52.16.157.182:8000
или 80
192.168.99.100:8000
или 80
Как я предполагаю, контейнеры Docker находятся внутри докер-машины? Если да, то как я могу указать, что работает на какой машине и почему я не могу получить доступ к работающим веб-серверам?
Да, вы правы насчет контейнеров, запущенных на докер-машине, в данном случае экземпляра EC2.
Наиболее вероятная причина, по которой вы не можете подключиться к ним, - это правила брандмауэра EC2 по умолчанию. Группа безопасности по умолчанию, созданная докер-машиной на AWS EC2, разрешает доступ только к SSH, Docker и, возможно, Swarm. (видеть: https://docs.docker.com/machine/drivers/aws/#/security-group)
Порт 80 и 8080 не открыты для мира. Вам нужно будет войти в AWS и изменить группу безопасности, чтобы разрешить больше портов.
В качестве примечания, в обзоре docker ps вы можете видеть, что только 3 контейнера фактически прослушивают порты, один на 80
, один на 5432
и один на 8000
, у остальных нет привязки портов к хосту. Для получения дополнительной информации по этому поводу я бы посоветовал почитать о сети докеров и раскрытии портов (см. https://docs.docker.com/engine/reference/run/#/expose-incoming-ports)