wdocker.py 文件源码

python
阅读 23 收藏 0 点赞 0 评论 0

项目:pydocktors 作者: Patouche 项目源码 文件源码
def _wait_for_port(self):
        wait_port, image, res = self.p('wait_for_port'), self.p('image'), 1
        if wait_port:
            container_id = self._container.id
            container_info = self._client.containers.get(container_id)
            ip_address = container_info.attrs['NetworkSettings']['IPAddress']
            unsupported_errors = [
                (errno.EHOSTUNREACH,
                 '[{image}] Host {ip} cannot be reach. The container may exit abnormally. Container logs :\n{logs}')
            ]

            with contextlib.closing(socket.socket(socket.AF_INET, socket.SOCK_STREAM)) as sock:
                while res != 0:
                    res = sock.connect_ex((ip_address, wait_port))
                    logger.debug(
                        '[%s] Waiting for port %d to respond (code:%d => %s).',
                        image, wait_port, res, errorcode.get(res, '--')
                    )
                    unsupported_error = next((e[1] for e in unsupported_errors if e[0] == res), None)
                    if unsupported_error:
                        raise DockerContainerError(unsupported_error.format(
                            image=image,
                            port=wait_port,
                            signal=errorcode.get(res, '--'),
                            ip=ip_address,
                            logs=self._container.logs(stream=False).decode('utf-8')
                        ))

                    time.sleep(0.1 if res != 0 else 0)
            logger.debug('[%s] Port %d is now responding.', image, wait_port)
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号