创建烟雾容器以链接其他docker容器

时间:2016-09-28 03:59:59

标签: docker docker-compose

我需要创建一个烟雾容器来链接其他docker容器。 基本上我有多个相互链接的容器 我正在尝试创建一个烟雾容器,我可以运行一些脚本来检查每个容器和端口是否在docker-compose之后启动。

以下是我试过的2个解决方案 a)运行python脚本从(/ etc / hosts)获取ip和端口,然后检查socket(ip:host)是否可访问。 (/ etc / hots)并没有给我欲望回报。

b)运行一个python脚本,使用(docker inspect)获取ip和host,它给出了所有容器ip。问题是我需要在其中一个docker容器中安装docker,这不是一个好的解决方案

我如何实现目标。

1 个答案:

答案 0 :(得分:1)

如果您正在使用Compose规范的Version 2,那么您的服务容器将全部在Docker网络中运行。您可以在同一网络中创建烟雾测试容器并按名称访问容器,您无需查找IP地址。

获取代表分布式系统的示例撰写文件:

version: '2'

services:
  web:
    image: nginx:alpine

  redis:
    image: redis:alpine

如果运行myapp时YAML文件位于名为docker-compose u p -d的目录中,Compose将创建一个名为myapp_default的网络,并为该网络中的服务创建容器:

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

现在您可以运行一个单独的容器并将其加入该网络 - 因此您的冒烟测试不需要成为撰写文件的一部分。在网络内部,您可以按名称访问容器,该名称是从{app-name}_{service-name}_{instance-number}构建的。

作为一个简单的例子,我可以使用安装了一些实用程序的图像,然后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