Skip to content

Path is not mounted correctly when running Docker hooks from Docker #1387

@okainov

Description

@okainov

Situation:

  • In our CI we want to run pre-commit inside Docker.
  • Some of our hooks are docker_image

Problem
This line mostly

'-v', f'{os.getcwd()}:/src:rw,Z',

Currently pre-commit mounts the current directory to /src and uses current directory name as mount base.
However this does not work when pre-commit is run inside the container on some mounted path already, because mount points are relative to the host, not to the container.

Example:

/opt/my_code      <- host, mounts /opt/my_code:/project
/project              <- in Docker running pre-commit, pre-commit is doing mount /project:/src
/src                   <-  (in Dockerized hook)

Currently pre-commit will try to mount it as -v /project:/src,rw,Z. Expected - to mount it as -v /opt/my_code:/src

Possible solution:

When I replaced os.getcwd() from the code above to translate_path(os.getcwd()) where translate_path is taken from https://gist.github.com/dpfoose/f96d4e4b76c2e01265619d545b77987a, it worked perfectly. It does add extra docker pip-dependency though.

See also: https://forums.docker.com/t/mounting-a-volume-not-working-with-running-docker-in-docker/25775/2

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions