mirror of
https://github.com/OpenHands/OpenHands.git
synced 2025-12-26 13:52:43 +08:00
33 lines
1.2 KiB
Python
33 lines
1.2 KiB
Python
from urllib.parse import urlparse, urlunparse
|
|
|
|
from openhands.utils.environment import is_running_in_docker
|
|
|
|
|
|
def replace_localhost_hostname_for_docker(
|
|
url: str, replacement: str = 'host.docker.internal'
|
|
) -> str:
|
|
"""Replace localhost hostname in URL with the specified replacement when running in Docker.
|
|
|
|
This function only performs the replacement when the code is running inside a Docker
|
|
container. When not running in Docker, it returns the original URL unchanged.
|
|
|
|
Only replaces the hostname if it's exactly 'localhost', preserving all other
|
|
parts of the URL including port, path, query parameters, etc.
|
|
|
|
Args:
|
|
url: The URL to process
|
|
replacement: The hostname to replace localhost with (default: 'host.docker.internal')
|
|
|
|
Returns:
|
|
URL with localhost hostname replaced if running in Docker and hostname is localhost,
|
|
otherwise returns the original URL unchanged
|
|
"""
|
|
if not is_running_in_docker():
|
|
return url
|
|
parsed = urlparse(url)
|
|
if parsed.hostname == 'localhost':
|
|
# Replace only the hostname part, preserving port and everything else
|
|
netloc = parsed.netloc.replace('localhost', replacement, 1)
|
|
return urlunparse(parsed._replace(netloc=netloc))
|
|
return url
|