mirror of
https://github.com/DerTyp7/docker_minecraft_server_auto_starter.git
synced 2025-10-30 04:57:09 +01:00
Update Docker configuration and Nginx setup
This commit is contained in:
@@ -1,16 +1,20 @@
|
||||
from math import log
|
||||
import socket
|
||||
import docker
|
||||
import os
|
||||
import logging
|
||||
|
||||
|
||||
class DockerHandler:
|
||||
def __init__(self, base_url, port_ip_map):
|
||||
def __init__(self, base_url, port_map):
|
||||
logging.info(
|
||||
f'Initializing docker handler with base url {base_url} and port ip map: {port_ip_map}')
|
||||
f'Initializing docker handler with base url {base_url} and port ip map: {port_map}')
|
||||
self.base_url = base_url
|
||||
self.client = docker.DockerClient(base_url=base_url)
|
||||
self.port_ip_map = port_ip_map
|
||||
self.port_map = port_map
|
||||
self.current_network = self.get_current_network()
|
||||
logging.info('Docker handler initialized')
|
||||
logging.info(f'Current network: {self.current_network}')
|
||||
|
||||
def get_current_container(self):
|
||||
current_container_name = os.environ.get('HOSTNAME')
|
||||
@@ -20,13 +24,15 @@ class DockerHandler:
|
||||
logging.error(f'Container {current_container_name} not found')
|
||||
return None
|
||||
|
||||
def get_current_container_ip(self):
|
||||
# Get IP of current container
|
||||
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]
|
||||
return networks[current_network]['IPAddress']
|
||||
if 'Aliases' in networks[current_network]:
|
||||
dns_name = networks[current_network]['Aliases'][0]
|
||||
return dns_name
|
||||
return None
|
||||
|
||||
def get_current_network(self):
|
||||
@@ -54,7 +60,67 @@ class DockerHandler:
|
||||
f'No docker container found with ip {ip} in network {self.current_network}')
|
||||
return None
|
||||
|
||||
def get_container_by_name(self, name):
|
||||
try:
|
||||
return self.client.containers.get(name)
|
||||
except docker.errors.NotFound:
|
||||
logging.error(f'Container {name} not found')
|
||||
return None
|
||||
|
||||
def is_container_starting(self, container):
|
||||
if container:
|
||||
return container.attrs['State']['Health']['Status'] == 'starting'
|
||||
return False
|
||||
|
||||
def print_all_container_names(self):
|
||||
try:
|
||||
containers = self.client.containers.list(
|
||||
all=True, filters={"network": self.current_network})
|
||||
|
||||
if containers is None:
|
||||
logging.info('No containers found')
|
||||
return None
|
||||
|
||||
for container in containers:
|
||||
logging.info(f'Container name: {container.name}')
|
||||
# get docker compose dns name
|
||||
networks = container.attrs['NetworkSettings']['Networks']
|
||||
if self.current_network in networks:
|
||||
logging.info(
|
||||
f'Container ip: {networks[self.current_network]["IPAMConfig"]["IPv4Address"]}')
|
||||
else:
|
||||
logging.info(f'Container ip: None')
|
||||
|
||||
except docker.errors.APIError as e:
|
||||
logging.error(f'Error getting container list: {e}')
|
||||
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"]}')
|
||||
|
||||
try:
|
||||
containers = self.client.containers.list(
|
||||
all=True, filters={"network": self.current_network})
|
||||
|
||||
if containers is None:
|
||||
logging.info('No containers found')
|
||||
return None
|
||||
|
||||
for container in containers:
|
||||
networks = container.attrs['NetworkSettings']['Networks']
|
||||
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']
|
||||
logging.info(
|
||||
f'No docker container found with dns name {dns_name} in network {self.current_network}')
|
||||
return None
|
||||
|
||||
except docker.errors.APIError as e:
|
||||
logging.error(f'Error getting container list: {e}')
|
||||
return None
|
||||
|
||||
Reference in New Issue
Block a user