2016-09-28 35 views
0

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

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

b)运行一个获取ip和主机的python脚本(docker inspect),它给出所有的容器ip。问题在于我需要将码头安装在其中一个码头集装箱内,这不是一个好的解决方案

如何实现我的目标。

+0

也许你搜索类似kubernetes。它是码头集装箱周围的包装物。无需docker-compose,您可以完全访问Docker容器内外的所有信息。 https://kubernetesbootcamp.github.io/kubernetes-bootcamp/index.html – Gabbax0r

回答

1

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

以代表一个分布式系统这个样本撰写文件:

version: '2' 

services: 
    web: 
    image: nginx:alpine 

    redis: 
    image: redis:alpine 

如果YAML文件是在一个名为myapp当你运行docker-compose u p -d目录,撰写将创建一个网名叫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 

[email protected]:/# 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        

[email protected]:/# 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