创build烟容器来链接其他docker集装箱

我需要创build一个烟容器来链接其他docker集装箱。 基本上我有多个容器相互链接我想创build一个烟容器,我可以运行一些脚本来检查每个容器和那里的端口后,docker组成。

以下是我试过的2个解决schemea)运行一个python脚本从(/ etc / hosts)中获取ip和端口,然后检查是否可以访问socket(ip:host)。 (/ etc / hots)不会给我想要的回报。

b)运行一个python脚本获取ip和主机使用(docker inspect)给出所有的容器ip。 问题是我需要docker安装在一个docker集装箱内,这不是一个好的解决scheme

我如何实现我的目标。

如果您使用的是Compose规范的第2版 ,那么您的服务容器将全部在Dockernetworking中运行。 您可以在同一networking中创build烟雾testing容器,并按名称访问容器,无需查找IP地址。

拿这个代表分布式系统的样例组成文件:

version: '2' services: web: image: nginx:alpine redis: image: redis:alpine 

如果在运行docker-compose up -d ,YAML文件位于名为myapp的目录中,则Compose将创build一个名为myapp_default的networking,并为该networking中的服务创build容器:

 > docker-compose up -d Creating network "myapp_default" with the default driver Creating myapp_redis_1 Creating myapp_web_1 

现在,您可以运行一个单独的容器并将其join该networking – 因此您的烟雾testing不需要成为撰写文件的一部分。 在networking内部,你可以通过他们的名字到达容器,这个名字是由{app-name}_{service-name}_{instance-number}构build的。

作为一个简单的例子,我可以在安装了一些实用程序的情况下使用一个映像,只需ping那些容器

 > docker run -it --rm --network myapp_default sixeyed/ubuntu-with-utils root@000db50df537:/# ping -c 1 myapp_web_1 PING myapp_web_1 (172.19.0.2) 56(84) bytes of data. 64 bytes from myapp_web_1.myapp_default (172.19.0.2): icmp_seq=1 ttl=64 time=0.423 ms root@000db50df537:/# ping -c 1 myapp_redis_1 PING myapp_redis_1 (172.19.0.3) 56(84) bytes of data. 64 bytes from myapp_redis_1.myapp_default (172.19.0.3): icmp_seq=1 ttl=64 time=0.340 ms