【发布时间】:2016-04-01 23:31:06
【问题描述】:
这是一个由两部分组成的问题。
第一部分: 在同一个 docker 容器中运行 Consul 和 Tomcat 的最佳方法是什么?
我已经构建了自己的映像,正确安装了 Tomcat 和 Consul,但我不确定如何启动它们。我尝试将两个调用都作为 CMD 放在 Dockerfile 中,但没有成功。我试图将 Consul 作为 ENTRYPOINT (Dockerfile) 和 Tomcat,以便在“docker run”命令中调用。反之亦然,但我觉得这也不是什么好办法。
docker 将在一个 AWS 实例中运行。每个 docker 容器都将 Consul 作为服务器运行,以在另一个 AWS 实例中注册自己。 Consul 和 Consul-template 将被集成到适当的负载平衡中。这样,当我插入或拔出容器时,我的 HAproxy 实例将能够正确转发请求。
第二部分: 在我所做的个别测试中,docker 容器能够访问我的主 Consul 服务器(领导者),但它未能将自己注册为“活动”节点。
阅读 Consul 服务器上的日志,我认为是我公开和发布哪些端口的问题。在 AWS 中,我已经允许在这个特定安全组中的实例之间通过 TCP 和 UDP 的所有端口进行通信。
您知道我应该公开和发布哪些端口以允许独立 consul(aws 实例)和 consul 服务器(在 aws 容器内的 docker 容器内运行)之间进行正确通信吗?运行 docker 容器的命令是什么: docker run -p 8300:8300 .........
谢谢。
【问题讨论】:
-
我的 AWS 实例的 IP 为 172.30.0.165。当 docker 运行时,它有第二个 IP 地址。 172.17.0.2。此外,我构建的 docker 映像暴露了以下端口:8080 53/udp 8300 8301 8301/udp 8302 8302/udp 8400 8500 8600 8600/udp。我运行容器,将以下端口发布为“docker run -p 8300:8300 -p 8301:8301 -p 8301:8301/udp -p 8302:8302 -p 8302:8302/udp -p 8400:8400 -p 8500: 8500 -p 53:53/udp -p 8600:8600/udp 容器标签”。从另一个 AWS 实例,我无法使用 telnet 访问端口 8301、8302。我做错了什么?
-
不回答,但 Docker 最佳实践是 Caas:容器即服务。这实际上意味着您不应该在单个容器中运行两个服务。 Just yesterday a video has been released on blog.docker.com: Docker Containers-as-a-Service Walkthrough。建议你使用 [Docker Compose ](docs.docker.com/compose) 同时启动这两个服务并管理多容器应用程序。
-
我完全理解 Caas 的想法,但我觉得它有点自相矛盾。我看不到在没有服务本身可用的情况下运行服务发现系统的优势。我的意思是,让容器运行领事服务器但“什么都不做”的目的是什么?
-
它什么都不做,它与它所宣传的服务耦合(感谢 compose)。
-
好的。谢谢你。任何想法为什么领事领导无法联系到 docker 容器内的领事?
标签: docker load-balancing