from __future__ import absolute_import import time import requests from requests import exceptions import docker import pytest from docker import utils as docker_utils @pytest.fixture(scope='session') def docker_client(): client_cfg = docker_utils.kwargs_from_env() return docker.Client(version='1.21', **client_cfg) def wait_till_up(url, attempts): for i in range(attempts-1): try: requests.get(url) return except exceptions.ConnectionError as e: time.sleep(0.1 * 2**i) else: requests.get(url) @pytest.yield_fixture() def registry(docker_client): cli = docker_client cli.pull('registry', '2') cont = cli.create_container( 'registry:2', ports=[5000], host_config=cli.create_host_config( port_bindings={ 5000: 5000, }, ), ) try: cli.start(cont) wait_till_up('http://localhost:5000', 3) try: yield finally: cli.stop(cont) finally: cli.remove_container(cont, v=True, force=True)