微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Django 频道取消错误

如何解决Django 频道取消错误

我正在使用 docker 在服务器上运行 django 项目。但是,不知何故,在我添加函数 check_docker_container_status 来检查容器后发现了以下错误。这是来自哨兵的错误,我的 django 上没有错误日志。但是,问题出在不知何故我们的服务器也因为这个 CancelledError.

CancelledError: null
  File "channels/http.py",line 192,in __call__
    await self.handle(body_stream)
  File "asgiref/sync.py",line 304,in __call__
    ret = await asyncio.wait_for(future,timeout=None)
  File "asyncio/tasks.py",line 414,in wait_for
    return await fut

sentry error

正在尝试创建 docker ssh 连接。

from channels.generic.websocket import WebsocketConsumer


class DockeRSSH(WebsocketConsumer):

    def connect(self):
        self.accept()
        ....

        try:
            self.client.inspect_image(full_image_name)
        except docker.errors.ImageNotFound:
            pull_docker_image(self.client,full_image_name)

        container_id,container_is_running = check_docker_container_status(self.client,container_name)

def close(self,close_code):
    logger.debug("### onclose triggered")
    self.disconnect(1)

def disconnect(self,close_code):
    # Close Thread
    self.stop_thread = True

    # Close Socket
    if self.tls:
        self.socket.sendall('stop\r\n'.encode('utf-8'))
    else:
        self.socket._sock.send('stop\r\n'.encode('utf-8'))

    logger.debug("### Closing the socket and containers")
    # socket close
    self.socket.close()

    # Clean up the container
    self.client.stop(self.container_id)
    self.client.wait(self.container_id)
    self.client.remove_container(self.container_id)
    logger.info("## Stopped the container: " + str(self.container_id.encode('utf-8')))


    # Close the client connection
    self.client.close()

check_docker_container_status函数是:

def check_docker_container_status(client,container_name):
    # print(dir(client))
    """
    ['__attrs__','__class__','__delattr__','__dict__','__dir__','__doc__','__enter__','__eq__','__exit__','__format__','__ge__','__getattribute__','__getstate__','__gt__','__hash__','__init__','__init_subclass__','__le__','__lt__','__module__','__ne__','__new__','__reduce__','__reduce_ex__','__repr__','__setattr__','__setstate__','__sizeof__','__str__','__subclasshook__','__weakref__','_attach_params','_attach_websocket','_auth_configs','_check_is_tty','_create_websocket_connection','_delete','_disable_socket_timeout','_general_configs','_get','_get_raw_response_socket','_get_result','_get_result_tty','_multiplexed_buffer_helper','_multiplexed_response_stream_helper','_post','_post_json','_proxy_configs','_put','_raise_for_status','_read_from_socket','_result','_retrieve_server_version','_set_auth_headers','_set_request_timeout','_stream_helper','_stream_raw_result','_unmount','_url','_version','adapters','api_version','attach','attach_socket','auth','base_url','build','cert','close','commit','configs','configure_plugin','connect_container_to_network','containers','cookies','create_config','create_container','create_container_config','create_container_from_config','create_endpoint_config','create_host_config','create_network','create_networking_config','create_plugin','create_secret','create_service','create_swarm_spec','create_volume','credstore_env','delete','df','diff','disable_plugin','disconnect_container_from_network','enable_plugin','events','exec_create','exec_inspect','exec_resize','exec_start','export','get','get_adapter','get_archive','get_image','get_redirect_target','get_unlock_key','head','headers','history','hooks','images','import_image','import_image_from_data','import_image_from_file','import_image_from_image','import_image_from_stream','import_image_from_url','info','init_swarm','inspect_config','inspect_container','inspect_distribution','inspect_image','inspect_network','inspect_node','inspect_plugin','inspect_secret','inspect_service','inspect_swarm','inspect_task','inspect_volume','join_swarm','kill','leave_swarm','load_image','login','logs','max_redirects','merge_environment_settings','mount','networks','nodes','options','params','patch','pause','ping','plugin_privileges','plugins','port','post','prepare_request','proxies','prune_builds','prune_containers','prune_images','prune_networks','prune_volumes','pull','pull_plugin','push','push_plugin','put','put_archive','rebuild_auth','rebuild_method','rebuild_proxies','reload_config','remove_config','remove_container','remove_image','remove_network','remove_node','remove_plugin','remove_secret','remove_service','remove_volume','rename','request','resize','resolve_redirects','restart','search','secrets','send','service_logs','services','should_strip_auth','ssl_version','start','stats','stop','stream','tag','tasks','timeout','top','trust_env','unlock_swarm','unpause','update_container','update_node','update_service','update_swarm','upgrade_plugin','verify','version','volumes','wait']
    """
    #response = client.containers(filters={'name': container_name,'status': 'running'},)
    response = client.containers(filters={'name': container_name},)

    if response:
        #  container = DOCKER_CLIENT.containers.get(container_name)
        # containers(quiet=False,all=False,trunc=False,latest=False,since=None,before=None,limit=-1,size=False,filters=None)
        # print(f"#############  Response from the Docker client is {response}")
        #print(dir(response))
        """
        [{'Id': 'd47ade9be6cd04f6d1xxxxx','Names': ['/xxxx-Box-XXIMRANX'],'Image': 'registry.gitlab.com/xxx:staging','ImageID': 'sha256:14e92c5cea25xxxx','Command': 'docker-entrypoint.sh bin/bash','Created': 1607615273,'Ports': [],'Labels': {'id': 'xxxx','maintainer': 'info@xxxx.com','user': 'superadmin'},'State': 'running','Status': 'Up 5 minutes','HostConfig': {'NetworkMode': 'lab'},'NetworkSettings': {'Networks': {'lab': {'IPAMConfig': None,'Links': None,'Aliases': None,'NetworkID': '6e81c27f56af231e1xxxxx','EndpointID': 'aba544c4135025e5f9bae0xxxxx','Gateway': '','IPAddress': '10.222.xxx.xxx','IPPrefixLen': 32,'IPv6Gateway': '','GlobalIPv6Address': '','GlobalIPv6PrefixLen': 0,'MacAddress': '','DriverOpts': None}}},'Mounts': []}]
        """
        container_state = response[0]['State']
        container_is_running = container_state == 'running'
        container_id = str(response[0]['Id'])
        logging.debug(container_is_running)
        return container_id,container_is_running
    else:
        return None,False

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?