testcontainers/testcontainers-python

Bug: DockerImage path arg is misleading

black-snow opened this issue · 10 comments

Describe the bug

testcontainers.core.image.DockerImage has a constructor arg path with the following docs:

path – Path to the Dockerfile to build the image

But actually this doesn't seem to be true. It's rather the context, the path to the directory to build in and the dockerfile itself must be named Dockerfile. Especially for testing this is very unhandy. I often have several dockerfiles in the same directory. I'd expect bein able to pass a context and the actual path to the dockerfile, like

with DockerImage(dockerfile="./caseA.Dockerfile", context=".", tag="casea:latest") as image:
     pass

To Reproduce

  • have a test.Dockerfile
  • with DockerImage(path="./test.Dockerfile", tag="test") as image: ...
  • see not too helpful error message from docker itself bubble up

Runtime environment

not relevant


P.S.: build-args would also be handy

so, that's a mistake - I'm pretty busy with my job these days but will review patches, seems like something to fix (and add re: build/args).

i might even argue for calling adding build/args a fix, as it makes our api more congruent with the docker api.

I'll take a look at it.

Err... make tests in the devcontainer leaves me with 32 failed, 42 passed, 3 warnings in 61.63s

/edit: locally they look better but you have to poetry install -E registry - only 26 tests fails then --- there should really be a readme for contributors

i think that makes sense if you are on windows. its on my list to find a piece of terraform code that creates a windows VM in aws, so i can develop against windows, lots of challenges there. (cc @kiview)

@black-snow you should be poetry install --with dev --all-extras if you are trying to run the full test suite (like pytest -s)

@alexanderankin I'm on Ubuntu 24 right now. Even with all the extras 30 tests still fail.

From https://docker-py.readthedocs.io/en/stable/images.html#docker.models.images.ImageCollection.build it's not very clear what exactly the path is either. Looking at the code I'm pretty sure this is not what I expect. So I might have to redirect this to docker-py first.

It's totally fine to docker build -t whatevs -f some/sub/dir/my.Dockerfile . - yet the code seems to require the dockerfile to be top-level in the path, which is treated as context.

/edit: okay dockerfile can be a path within path ... the naming seems quite unfortunate

@black-snow do you have your docker socket visible to your user? e.g. i think by default the docker socket has these permissions:

$ ll /var/run/docker.sock 
srw-rw---- 1 root docker 0 Jun 23 14:33 /var/run/docker.sock=

and then you need to be in the docker group:

$ groups | tr ' ' '\n' | cat -n | grep docker
    11	docker