Refactor DockerHandler class to improve container

retrieval
This commit is contained in:
DerTyp7
2023-12-11 15:04:41 +01:00
parent 2908389772
commit 732650e31e

View File

@@ -1,5 +1,3 @@
from math import log
import socket
import docker import docker
import os import os
import logging import logging
@@ -14,26 +12,19 @@ class DockerHandler:
self.port_map = port_map self.port_map = port_map
self.current_network = self.get_current_network() self.current_network = self.get_current_network()
logging.info('Docker handler initialized') logging.info('Docker handler initialized')
logging.info(
f'Current container name: {self.get_current_container_name()}')
logging.info(f'Current network: {self.current_network}') logging.info(f'Current network: {self.current_network}')
def get_current_container(self): def get_current_container(self):
current_container_name = os.environ.get('HOSTNAME') hostname = self.get_current_container_name()
try: if hostname:
return self.client.containers.get(current_container_name) return self.get_container_by_name(hostname)
except docker.errors.NotFound: return None
logging.error(f'Container {current_container_name} not found')
return None
def get_current_container_name(self): def get_current_container_name(self):
# Get DNS name of current container # Get container name from environment variable
current_container = self.get_current_container() return os.environ.get('HOSTNAME')
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
def get_current_network(self): def get_current_network(self):
# Get network of current container # Get network of current container
@@ -87,7 +78,7 @@ class DockerHandler:
networks = container.attrs['NetworkSettings']['Networks'] networks = container.attrs['NetworkSettings']['Networks']
if self.current_network in networks: if self.current_network in networks:
logging.info( logging.info(
f'Container ip: {networks[self.current_network]["IPAMConfig"]["IPv4Address"]}') f'Container ip: {networks[self.current_network]["IPAddress"]}')
else: else:
logging.info(f'Container ip: None') logging.info(f'Container ip: None')
@@ -96,12 +87,11 @@ class DockerHandler:
return None return None
def get_ip_by_dns_name(self, dns_name): 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): for container in self.client.containers.list(all=True):
networks = container.attrs['NetworkSettings']['Networks'] networks = container.attrs['NetworkSettings']['Networks']
if self.current_network in networks: if self.current_network in networks:
logging.info( 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: try:
containers = self.client.containers.list( 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']: if self.current_network in networks and dns_name in networks[self.current_network]['Aliases']:
logging.info( logging.info(
f'Found container {container.name} with dns name {dns_name} in network {self.current_network}') 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( logging.info(
f'No docker container found with dns name {dns_name} in network {self.current_network}') f'No docker container found with dns name {dns_name} in network {self.current_network}')
return None return None