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