Skip to content

Running multiple environments in parallel using same container failed with container name conflict error. #193

@xeronm

Description

@xeronm

Hi,

I've faced with the following problem.
I use two environment with postgres container.
When I run in parallel mode tox -p, only first environment that use container succeeded, the second fails with container name conflict error.

docker.errors.APIError: 409 Client Error for http+docker://localhost/v1.43/containers/create?name=db-tox-31039: Conflict ("Conflict. The container name "/db-tox-31039" is already in use by container "9e91cc7f480abcc9ac28a8f47eb4520a6de4db3811b8c706d4371d80330ae97e". You have to remove (or rename) that container to be able to reuse that name.")
  flake: OK ✔ in 8.25 seconds
  py39-dj42-sqlite: OK ✔ in 1 minute 5.1 seconds
  py310-dj42-sqlite: OK ✔ in 1 minute 11.35 seconds
  py39-dj42-sqlite: OK (65.10=setup[5.71]+cmd[3.62,52.08,1.10,1.23,1.35] seconds)
  py39-dj42-postgres: OK (81.13=setup[11.72]+cmd[67.23,0.74,0.76,0.68] seconds)
  py310-dj42-sqlite: OK (71.35=setup[7.10]+cmd[3.36,57.53,0.91,1.00,1.45] seconds)
  py310-dj42-postgres: FAIL code 2 (7.19 seconds)
  isort: OK (7.47=setup[5.58]+cmd[1.90] seconds)
  flake: OK (8.25=setup[5.71]+cmd[2.54] seconds)
  evaluation failed :( (81.48 seconds)

The problem is in

def runas_name(container_name: str, pid: Optional[int] = None) -> str:
    ...
    pid = pid or os.getpid()
    return f"{container_name}-tox-{pid}"

Could you consider using either thread Id instead process Id or concatenate {env_name} with process id?

def runas_name(container_name: str, pid: Optional[int] = None) -> str:
    ...
    pid = pid or threading.get_ident()
    return f"{container_name}-tox-{pid}"

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions