我需要创建一个烟雾容器来链接其他docker容器。 基本上我有多个相互链接的容器 我正在尝试创建一个烟雾容器,我可以运行一些脚本来检查每个容器和端口是否在docker-compose之后启动。
以下是我试过的2个解决方案 a)运行python脚本从(/ etc / hosts)获取ip和端口,然后检查socket(ip:host)是否可访问。 (/ etc / hots)并没有给我欲望回报。
b)运行一个python脚本,使用(docker inspect)获取ip和host,它给出了所有容器ip。问题是我需要在其中一个docker容器中安装docker,这不是一个好的解决方案我如何实现目标。
答案 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