mirror of
https://github.com/NicolasBohn/NexQuant.git
synced 2026-08-03 10:27:42 +00:00
e03fca3206
* Initial plan for issue * Fix Docker container cleanup issue by using try-finally block Co-authored-by: peteryang1 <25981102+peteryang1@users.noreply.github.com> * Fix additional Docker container leaks in health_check and GPU test functions Co-authored-by: peteryang1 <25981102+peteryang1@users.noreply.github.com> * Remove temporary test files and finalize Docker container cleanup fix Co-authored-by: peteryang1 <25981102+peteryang1@users.noreply.github.com> * Refactor container cleanup code to reduce duplication as requested in review feedback Co-authored-by: peteryang1 <25981102+peteryang1@users.noreply.github.com> * Refactor container cleanup to use shared function and always stop before remove Co-authored-by: peteryang1 <25981102+peteryang1@users.noreply.github.com> * fix CI * Fix mypy type checking errors for Docker container cleanup Co-authored-by: peteryang1 <25981102+peteryang1@users.noreply.github.com> * fix CI * Remove unnecessary _cleanup_container wrapper method in DockerEnv class Co-authored-by: peteryang1 <25981102+peteryang1@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: peteryang1 <25981102+peteryang1@users.noreply.github.com> Co-authored-by: Xu Yang <xuyang1@microsoft.com>
53 lines
1.7 KiB
Python
53 lines
1.7 KiB
Python
import socket
|
|
|
|
import docker
|
|
|
|
from rdagent.log import rdagent_logger as logger
|
|
from rdagent.utils.env import cleanup_container
|
|
|
|
|
|
def check_docker() -> None:
|
|
container = None
|
|
try:
|
|
client = docker.from_env()
|
|
client.images.pull("hello-world")
|
|
container = client.containers.run("hello-world", detach=True)
|
|
logs = container.logs().decode("utf-8")
|
|
print(logs)
|
|
logger.info(f"The docker status is normal")
|
|
except docker.errors.DockerException as e:
|
|
logger.error(f"An error occurred: {e}")
|
|
logger.warning(
|
|
f"Docker status is exception, please check the docker configuration or reinstall it. Refs: https://docs.docker.com/engine/install/ubuntu/."
|
|
)
|
|
finally:
|
|
cleanup_container(container, "health check")
|
|
|
|
|
|
def is_port_in_use(port):
|
|
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
|
|
return s.connect_ex(("127.0.0.1", port)) == 0
|
|
|
|
|
|
def check_and_list_free_ports(start_port=19899, max_ports=10) -> None:
|
|
is_occupied = is_port_in_use(port=start_port)
|
|
if is_occupied:
|
|
free_ports = []
|
|
for port in range(start_port, start_port + max_ports):
|
|
if not is_port_in_use(port):
|
|
free_ports.append(port)
|
|
logger.warning(
|
|
f"Port 19899 is occupied, please replace it with an available port when running the `rdagent ui` command. Available ports: {free_ports}"
|
|
)
|
|
else:
|
|
logger.info(f"Port 19899 is not occupied, you can run the `rdagent ui` command")
|
|
|
|
|
|
def health_check():
|
|
"""
|
|
Check that docker is installed correctly,
|
|
and that the ports used in the sample README are not occupied.
|
|
"""
|
|
check_docker()
|
|
check_and_list_free_ports()
|