@@ -42,6 +42,9 @@ def run(self) -> None:
4242 def collect_from_containers (self ):
4343 domain_records = {}
4444
45+ non_unique_hostnames = set ()
46+ duplicate_hostnames = set ()
47+
4548 for c in self .cli .containers .list ():
4649 common_hostnames = []
4750
@@ -64,14 +67,20 @@ def collect_from_containers(self):
6467 # for docker-compose services service.project (.docker) names are created
6568 if c .attrs ['Config' ].get ('Labels' ) and c .attrs ['Config' ]['Labels' ].get ('com.docker.compose.service' ) and \
6669 c .attrs ['Config' ]['Labels' ].get ('com.docker.compose.project' ):
67- common_hostnames .append ("%s.%s" % (c .attrs ['Config' ]['Labels' ].get ('com.docker.compose.service' ),
68- c .attrs ['Config' ]['Labels' ].get ('com.docker.compose.project' )))
70+ compose_service = c .attrs ['Config' ]['Labels' ].get ('com.docker.compose.service' )
71+ compose_project = c .attrs ['Config' ]['Labels' ].get ('com.docker.compose.project' )
72+
73+ common_hostnames .append (compose_service )
74+ common_hostnames .append ("%s.%s" % (compose_service , compose_project ))
6975
70- if c .attrs ['Config' ]['Labels' ].get ('com.docker.compose.container-number' ):
71- common_hostnames .append ("%s.%s.%s" % (c .attrs ['Config' ]['Labels' ].get ('com.docker.compose.container-number' ),
72- c .attrs ['Config' ]['Labels' ].get ('com.docker.compose.service' ),
73- c .attrs ['Config' ]['Labels' ].get (
74- 'com.docker.compose.project' )))
76+ if compose_service in non_unique_hostnames :
77+ duplicate_hostnames .add (compose_service )
78+ else :
79+ non_unique_hostnames .add (compose_service )
80+
81+ compose_container_number = c .attrs ['Config' ]['Labels' ].get ('com.docker.compose.container-number' )
82+ if compose_container_number :
83+ common_hostnames .append ("%s.%s.%s" % (compose_container_number , compose_service , compose_project ))
7584
7685 name = c .attrs ['Name' ][1 :]
7786 settings = c .attrs ['NetworkSettings' ]
@@ -93,6 +102,9 @@ def collect_from_containers(self):
93102
94103 domain_records [ip ] = record
95104
105+ for ip , hosts in domain_records .items ():
106+ domain_records [ip ] = list (filter (lambda h : h not in duplicate_hostnames , hosts ))
107+
96108 hostnames = [DockerHost (hosts , ip ) for ip , hosts in domain_records .items ()]
97109
98110 self .handler .handle_hosts (hostnames )
0 commit comments