mirror of
https://github.com/DerTyp7/docker_minecraft_server_auto_starter.git
synced 2025-10-29 12:42:09 +01:00
Refactor DockerHandler class to improve container
retrieval
This commit is contained in:
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user