Hello all !

I have a docker image that you can run with:

docker compose -f compose_10f.yml up

The compose_10f.yml looks like this:

services:
  setup:
    image: tenfingers_10f:v1
    volumes:
      - ./:/data
    working_dir: /data/

Which makes the image believe it runs in ./ so if it saves “./hello” it will be saved in the folder where it’s launched (it works).

The thing is, it’s a command line program (named 10f.py), not a server or such, so I’d like to run it like this:

docker run -v ./:/data -w /data/ tenfingers_10f:v1 10f.py

And it works with the exception it doesn’t get to run in the mounted ./ folder.

It confuses the “mount” (or I’m just lucky the compose file works?) and it believes it lives in /data/, not in ./

python3: can't open file '/data/10f.py': [Errno 2] No such file or directory

I did struggle to set this up in the compose file, but I’d like to make the images run in a specific directory thinking they are in ./

Any ideas how I can figure this out?

Cheers and thank you so much!

Valmond

  • myliltoehurts@lemm.ee
    link
    fedilink
    arrow-up
    3
    ·
    edit-2
    8 months ago

    I think I misunderstood your problem, I assumed the issue was the volume mounts and after testing it I was indeed wrong - the docker cli now accepts relative paths so your original command does the same as what I suggested. After re-reading your issue I have a different idea of what’s wrong, but would have to see your dockerfile (or for you to confirm) to be sure.

    Do you add 10f.py to the docker image when you build it and do you specify the command/entrypoint in the Dockerfile? There are possibly to issues I can think of with how you do that (although considering the docker compose works it’s probably the 2nd):

    1. You do add it and you add it to /data in the image - when you mount a volume over it would make the script no longer exist in the container.
    2. You do add it and it’s not in /data - in this case the issue with running docker run -v ./:/data -w /workdir tenfigers_10f:v1 10f.py is the last bit - you override the command which makes it try to look for it at /data/10f.py, if you omit it the last part (10f.py) it should run whatever the original command was and assuming you set the cmd/entrypoint correctly in the Dockerfile it should see /data as ./ in python.

    (Also when you run it with the CLI you might want to add -it --rm as well to the docker command otherwise it won’t really behave similarly to a regular command)