You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让Docker嵌套容器解析git及网络基础设施主机名?

解决嵌套容器主机名解析问题

以下是几种可行的解决方法,按需选择:

方法1:让嵌套容器加入Docker Compose的项目网络

Docker Compose创建的默认网络(格式为<项目名>_default)内置DNS服务,能自动解析服务的主机名和服务名。修改daemon()函数中的网络配置,替换为你的项目实际默认网络名称:

def daemon(dc:DockerClient,
           url:str, image:str)->Tuple[str,int]:
    try:
        cont = dc.containers.create(image,
                                    network='myproject_default',  # 替换为你的docker-compose项目生成的默认网络名
                                    # network='ops'
        )
        try:
            cont.start()
            status = cont.wait()['StatusCode']
            logs = cont.logs().decode('utf-8')
            return logs, status
        finally:
            cont.remove()        
    except errors.APIError:
        raise
    except Exception:
        raise

查看项目网络名:执行docker network ls,找到对应项目的默认网络(通常以项目文件夹名称开头,后缀为_default)。

方法2:手动注入主机名映射到嵌套容器

在创建嵌套容器时,通过extra_hosts参数直接添加主机名与IP的映射,无需依赖DNS:

def daemon(dc:DockerClient,
           url:str, image:str)->Tuple[str,int]:
    try:
        cont = dc.containers.create(image,
                                    network='ops',
                                    extra_hosts={
                                        'git.mynetwork.com': 'myip',  # 替换为实际服务IP
                                        'cis.mynetwork.com': 'myip'
                                    }
        )
        try:
            cont.start()
            status = cont.wait()['StatusCode']
            logs = cont.logs().decode('utf-8')
            return logs, status
        finally:
            cont.remove()        
    except errors.APIError:
        raise
    except Exception:
        raise

方法3:指定嵌套容器使用自定义DNS服务器

如果网络中存在能解析内部主机名的DNS服务器,在创建容器时指定该DNS:

def daemon(dc:DockerClient,
           url:str, image:str)->Tuple[str,int]:
    try:
        cont = dc.containers.create(image,
                                    network='ops',
                                    dns=['192.168.1.100']  # 替换为你的内部DNS服务器IP
        )
        try:
            cont.start()
            status = cont.wait()['StatusCode']
            logs = cont.logs().decode('utf-8')
            return logs, status
        finally:
            cont.remove()        
    except errors.APIError:
        raise
    except Exception:
        raise

内容的提问来源于stack exchange,提问作者Innovations Anonymous

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 07:37:31