Код: Выделить всё
def _container_env_kwargs() -> dict:
# Try Podman rootless unix socket
rootless = f"/var/run/user/{os.getuid()}/podman/podman.sock"
if os.path.exists(rootless):
try:
s = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
s.settimeout(1.0)
s.connect(rootless); s.close()
env["DOCKER_HOST"] = f"unix://{rootless}"
env.setdefault("DOCKER_API_VERSION", "1.41")
env.setdefault("TESTCONTAINERS_RYUK_DISABLED", "true")
return {"environment": env}
except Exception:
raise RuntimeError("Failed to create env for container client")
@pytest.fixture(scope="session")
def oracle_container() -> Generator[dict, None, None]:
"""
Start an Oracle XE container using Podman.
Wait until it is ready to accept SQL connections.
"""
dk_kwargs = _container_env_kwargs()
container = (
DockerContainer(ORACLE_IMAGE, docker_client_kw=dk_kwargs)
.with_env("ORACLE_PASSWORD", ORACLE_PASSWORD)
.with_env("ORACLE_DATABASE", ORACLE_SERVICE)
.with_exposed_ports("1521/tcp")
)
container.start()
Код: Выделить всё
The above exception was the direct cause of the following exception:
@pytest.fixture(scope="session")
def oracle_container() -> Generator[dict, None, None]:
"""
Start an Oracle XE container using Docker or Podman.
Wait until it is ready to accept SQL connections.
"""
dk_kwargs = _container_env_kwargs() # container.start()
conftest.py:125:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
../../miniconda3/envs/scoring-service-v-2/lib/python3.12/site-packages/testcontainers/core/container.py:176: in start
Reaper.get_instance()
../../miniconda3/envs/scoring-service-v-2/lib/python3.12/site-packages/testcontainers/core/container.py:320: in get_instance
Reaper._instance = Reaper._create_instance()
^^^^^^^^^^^^^^^^^^^^^^^^^
../../miniconda3/envs/scoring-service-v-2/lib/python3.12/site-packages/testcontainers/core/container.py:343: in _create_instance
DockerContainer(c.ryuk_image)
../../miniconda3/envs/scoring-service-v-2/lib/python3.12/site-packages/testcontainers/core/container.py:85: in __init__
self._docker = DockerClient(**(docker_client_kw or {}))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
../../miniconda3/envs/scoring-service-v-2/lib/python3.12/site-packages/testcontainers/core/docker_client.py:73: in __init__
self.client = docker.from_env(**kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^
../../miniconda3/envs/scoring-service-v-2/lib/python3.12/site-packages/docker/client.py:94: in from_env
return cls(
../../miniconda3/envs/scoring-service-v-2/lib/python3.12/site-packages/docker/client.py:45: in __init__
self.api = APIClient(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^
../../miniconda3/envs/scoring-service-v-2/lib/python3.12/site-packages/docker/api/client.py:207: in __init__
self._version = self._retrieve_server_version()
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self =
def _retrieve_server_version(self):
try:
return self.version(api_version=False)["ApiVersion"]
except KeyError as ke:
raise DockerException(
'Invalid response from docker daemon: key "ApiVersion"'
' is missing.'
) from ke
except Exception as e:
> raise DockerException(
f'Error while fetching server API version: {e}'
) from e
E docker.errors.DockerException: Error while fetching server API version: ('Connection aborted.', FileNotFoundError(2, 'No such file or directory'))
Но затем, когда я нажимаюContainer.start(), мои точки останова срабатывают снова, как будто создается новый объект DockerClient, но без предоставленного мной окружения, и я получаю исключение.
Почему это происходит?
Подробнее здесь: https://stackoverflow.com/questions/798 ... ntainer-st
Мобильная версия