testcontainers / testcontainers-python

Testcontainers is a Python library that providing a friendly API to run Docker container. It is designed to create runtime environment to use during your automatic tests.
https://testcontainers-python.readthedocs.io/en/latest/
Apache License 2.0
1.44k stars 270 forks source link

Bug: DockerImage path arg is misleading #610

Closed black-snow closed 1 month ago

black-snow commented 1 month ago

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

Runtime environment

not relevant


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

alexanderankin commented 1 month ago

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.

black-snow commented 1 month ago

I'll take a look at it.

black-snow commented 1 month ago

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

alexanderankin commented 1 month ago

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)

alexanderankin commented 1 month ago

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

black-snow commented 1 month ago

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

black-snow commented 1 month ago

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

alexanderankin commented 4 weeks ago

@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
black-snow commented 3 weeks ago

@alexanderankin I have Docker Desktop on this machine an it keeps the sockets in ~/docker/desktop/docker.sock.

Never bothered to check on this machine - actually I'm not in the docker group here. But apparently this isn't necessary with recent Docker Desktop.

/edit /var/run/docker.sock seems to be baked in to some places

alexanderankin commented 3 weeks ago

i opened #621 so that I can find this discussion easier later, never heard of docker desktop on linux before