如何让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
相关产品推荐
相关产品推荐

