From 732650e31ecb6c6e940d7a1312931db514a51c74 Mon Sep 17 00:00:00 2001 From: DerTyp7 Date: Mon, 11 Dec 2023 15:04:41 +0100 Subject: [PATCH] Refactor DockerHandler class to improve container retrieval --- app/dockerHandler.py | 32 +++++++++++--------------------- 1 file changed, 11 insertions(+), 21 deletions(-) diff --git a/app/dockerHandler.py b/app/dockerHandler.py index 5b6f497..6c825f6 100644 --- a/app/dockerHandler.py +++ b/app/dockerHandler.py @@ -1,5 +1,3 @@ -from math import log -import socket import docker import os import logging @@ -14,26 +12,19 @@ class DockerHandler: self.port_map = port_map self.current_network = self.get_current_network() logging.info('Docker handler initialized') + logging.info( + f'Current container name: {self.get_current_container_name()}') logging.info(f'Current network: {self.current_network}') def get_current_container(self): - current_container_name = os.environ.get('HOSTNAME') - try: - return self.client.containers.get(current_container_name) - except docker.errors.NotFound: - logging.error(f'Container {current_container_name} not found') - return None + hostname = self.get_current_container_name() + if hostname: + return self.get_container_by_name(hostname) + return None def get_current_container_name(self): - # Get DNS name of current container - current_container = self.get_current_container() - if current_container: - networks = current_container.attrs['NetworkSettings']['Networks'] - current_network = list(networks.keys())[0] - if 'Aliases' in networks[current_network]: - dns_name = networks[current_network]['Aliases'][0] - return dns_name - return None + # Get container name from environment variable + return os.environ.get('HOSTNAME') def get_current_network(self): # Get network of current container @@ -87,7 +78,7 @@ class DockerHandler: networks = container.attrs['NetworkSettings']['Networks'] if self.current_network in networks: logging.info( - f'Container ip: {networks[self.current_network]["IPAMConfig"]["IPv4Address"]}') + f'Container ip: {networks[self.current_network]["IPAddress"]}') else: logging.info(f'Container ip: None') @@ -96,12 +87,11 @@ class DockerHandler: return None def get_ip_by_dns_name(self, dns_name): - # dEBUG Print all containers with their network ip and dns name for container in self.client.containers.list(all=True): networks = container.attrs['NetworkSettings']['Networks'] if self.current_network in networks: logging.info( - f'Container {container.name} ip: {networks[self.current_network]["IPAMConfig"]["IPv4Address"]}, dns name: {networks[self.current_network]["Aliases"]}') + f'Container {container.name} ip: {networks[self.current_network]["IPAddress"]}, dns name: {networks[self.current_network]["Aliases"]}') try: containers = self.client.containers.list( @@ -116,7 +106,7 @@ class DockerHandler: if self.current_network in networks and dns_name in networks[self.current_network]['Aliases']: logging.info( f'Found container {container.name} with dns name {dns_name} in network {self.current_network}') - return networks[self.current_network]['IPAMConfig']['IPv4Address'] + return networks[self.current_network]['IPAddress'] logging.info( f'No docker container found with dns name {dns_name} in network {self.current_network}') return None