Symtoms

when volume is mounted between host and container,
if container user is root, if you work in container,
all file's permission is root.
so you can't access that files on host as non-root user.

Solution - temporary

run container as non-root user

(create) docker run -it --user {non-root-user} {containername}
or
(existed) docker exec -it --user {non-root-user} {containername} {entrypoint}

Solution - permanate - create new container user

set non-root container user’s gid as host user’s gid

RUN groupadd --gid ${hostgid} ${shared-group-name}
RUN useradd --gid ${hostgid} --create-home containeruser
RUN chown -R containeruser:hostuser /path
RUN chmod -R 770 /path
  • Host volume
drwxrwx---.  hostuser hostuser

uid=1001(hostuser) gid=1001(hostuser) groups=1001(hostuser),xxx(docker),
  • Container volume
drwxrwx---.     1001 containeruser

uid=1000(containeruser) gid=1001(containeruser) groups=1001(containeruser)

Solution - permanate - modify existed container user

add host user’s group into non-root container user’s group

RUN groupadd --gid ${hostgid} ${shared-group-name}
RUN usermod --gid ${hostgid} ${containeruser} 
RUN chown -R ${containeruser}:${hostgid} /path
RUN chmod -R 770 /path
  • Host volume
drwxrwx---.  hostuser hostuser

uid=1001(hostuser) gid=1001(hostuser) groups=1001(hostuser),xxx(docker),
  • Container volume
drwxrwx---.     1001 containeruser

uid=1000(containeruser) gid=1000(containeruser),1001(hostuser) groups=1000(containeruser), 1001(hostuser)