How to give non-root user in Docker container access to a volume mounted on the host

前端 未结 2 1585
既然无缘
既然无缘 2020-12-15 04:09

I am running my application in a Docker container as a non-root user. I did this since it is one of the best practices. However, while running the container I mount a host v

相关标签:
2条回答
  • 2020-12-15 04:45

    There's no magic solution here: permissions inside docker are managed the same as permissions without docker. You need to run the appropriate chown and chmod commands to change the permissions of the directory.

    One solution is to have your container run as root and use an ENTRYPOINT script to make the appropriate permission changes, and then your CMD as an unprivileged user. For example, put the following in entrypoint.sh:

    #!/bin/sh
    
    chown -R appuser:appgroup /path/to/volume
    exec runuser -u appuser "$@"
    

    This assumes you have the runuser command available. You can accomplish pretty much the same thing using sudo instead.

    Use the above script by including an ENTRYPOINT directive in your Dockerfile:

    FROM baseimage
    
    COPY entrypoint.sh /entrypoint.sh
    ENTRYPOINT ["/bin/sh", "entrypoint.sh"]
    CMD ["/usr/bin/myapp"]
    

    This will start the container with:

    /bin/sh entrypoint.sh /usr/bin/myapp
    

    The entrypoint script will make the required permissions changes, then run /usr/bin/myapp as appuser.

    0 讨论(0)
  • 2020-12-15 04:45

    There will throw error if host env don't have appuser or appgroup, so better to use a User ID instead of user name:

    inside your container, run

    appuser$ id
    

    This will show:

    uid=1000(appuser) gid=1000(appuser) groups=1000(appuser)

    From host env, run:

    mkdir -p /some/folder
    chown -R 1000:1000 /some/folder
    docker run -v /some/folder:/some/folder [your_container]
    

    inside your container, check

    ls -lh
    

    to see the user and group name, if it's not root, then it's should worked.

    0 讨论(0)
提交回复
热议问题