定位 Docker 容器

定位 Docker 容器

我一直在玩各种码头工人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

相关内容