领事和Tomcat在同一个docker集装箱

这是一个由两部分组成的问题。

第一部分:在同一个docker集装箱中运行Consul和Tomcat的最佳方法是什么?

我已经build立了自己的图像,正确地安装了Tomcat和Consul,但我不确定如何启动它们。 我试图把这两个调用作为CMD在Dockerfile,但没有成功。 我试图把Consul作为ENTRYPOINT(Dockerfile)和Tomcat在“docker run”命令中调用。 反之亦然,但我有一种感觉,这也不是好的方法。

docker将运行在一个AWS实例中。 每个Docker容器都将运行Consul作为服务器,以在另一个AWS实例中注册自己。 领事和领事模板将被集成到适当的负载平衡中。 这样,当我插入或拔出容器时,我的HAproxy实例将能够正确地转发请求。

第二部分:在我做的个别testing中,docker集装箱能够到达我的主要领事服务器(领导者),但是它没有注册自己作为“活着的”节点。

阅读Consul服务器上的日志,我认为是我公开和发布的端口的问题。 在AWS中,我已经允许在此特定安全组中的实例之间在TCP和UDP的所有端口上进行通信。

你知道我应该公开和发布哪些端口,以允许独立领事(aws实例)和领事服务器(运行在aws容器内的docker容器内)之间进行适当的通信? 什么是命令来运行docker容器:docker运行-p 8300:8300 ………

谢谢。

我将使用ENTRYPOINT在docker run上启动一个脚本。

就像是

ENTRYPOINT myamazingbashscript.sh 

语法可能会closures,但你明白了

该脚本应该启动这两个服务,最后应该尾巴 – Tomcat日志(或任何日志)。

tail -f会阻止容器退出,因为tail -f命令永远不会退出,这也将帮助你看到tomcat在做什么

做…docker日志-f在docker运行后观看日志

请注意,因为容器不退出ü可以执行到它的docker执行exec -it容器名称bash

这可以让你有一个在容器内的嗅探

通常不是在一个容器中有两个服务的最好方法,因为它破坏了关注点和可重用性的分离,但是你可能有正当的理由

build立使用dockerbuild设,然后运行与docker运行,因为你说。

如果你决定去一个2容器的解决scheme,那么你将需要暴露容器之间的端口,让他们互相交谈。 您可以使用volumes_from在容器之间共享文件