我一直在玩各种码头工人和docker-machine教程。以下是 docker-machine 设置
$ 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
我理解docker-machine成为可以运行 1 个或多个 docker 容器的主机。在我的例子中,我的笔记本电脑上运行着 docker-machine,而 EC2 上则运行着另一个。
同时,我已将 EC2 实例设置为默认实例,使用以下命令
eval $(docker-machine env aws-sandbox)
这似乎奏效了,因为aws-沙盒被标记为ACTIVE
现在我已经尝试将 docker 容器加载到 docker-machine 中,但我不确定这是否有效。
$ 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 容器是否像我假设的那样位于 docker-machine 中?如果是这样,我如何列出哪台机器中正在运行什么,以及为什么我无法访问正在运行的 Web 服务器?
答案1
是的,您对在 docker-machine 上运行的容器的看法是正确的,在本例中是 EC2 实例。
您无法连接到这些的最可能原因是由于默认的 EC2 防火墙规则。docker-machine 在 AWS EC2 上创建的默认安全组仅允许访问 SSH、Docker 和可能的 Swarm。(参见:https://docs.docker.com/machine/drivers/aws/#/security-group)
端口 80 和 8080 不对外开放。您必须登录 AWS 并更改安全组以允许更多端口。
附注:在 docker ps 概览中,您可以看到实际上只有 3 个容器在监听端口,一个在80
,一个在5432
,一个在8000
,其他容器没有与主机的端口绑定。有关更多信息,我建议阅读有关 docker 网络和公开端口的信息(请参阅:https://docs.docker.com/engine/reference/run/#/expose-incoming-ports)