我一直在玩各种docker和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-sandbox被标记为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 服务器?
是的,您对在 docker-machine 上运行的容器是正确的,在这种情况下是 EC2 实例。
您无法连接到这些的最可能原因是默认的 EC2 防火墙规则。AWS EC2 上的 docker-machine 创建的默认安全组只允许访问 SSH、Docker 和可能的 Swarm。(见:https ://docs.docker.com/machine/drivers/aws/#/security-group )
80 和 8080 端口不对外开放。您必须登录 AWS 并更改安全组以允许更多端口。
作为旁注,在 docker ps 概述中,您可以看到实际上只有 3 个容器在侦听端口,一个 on
80
,一个 on5432
和一个 on8000
,其他的没有与主机的端口绑定。有关这方面的更多信息,我建议阅读 docker 网络和公开端口(请参阅:https ://docs.docker.com/engine/reference/run/#/expose-incoming-ports )