Docker-compose set user and group on mounted volume

前端 未结 4 493
感情败类
感情败类 2020-12-07 15:36

I\'m trying to mount a volume in docker-compose to apache image. The problem is, that apache in my docker is run under www-data:www-data but the mounted directo

相关标签:
4条回答
  • 2020-12-07 15:58

    First determine the uid of the www-data user:

    $ docker exec DOCKER_CONTAINER_ID id
    uid=100(www-data) gid=101(www-data) groups=101(www-data)
    

    Then, on your docker host, change the owner of the mounted directory using the uid (100 in this example):

    chown -R 100 ./
    

    Dynamic Extension

    If you are using docker-compose you may as well go for it like this:

    $ docker-compose exec SERVICE_NAME id
    uid=100(www-data) gid=101(www-data) groups=101(www-data)
    $ chown -R 100 ./
    

    You can put that in a one-liner:

    $ chown -r $(docker-compose exec SERVICE_NAME id -u) ./
    

    The -u flag will only print the uid to stdout.

    0 讨论(0)
  • 2020-12-07 16:00

    To achieve the desired behavior without changing owner / permissions on the host system do the following steps.

    1. add the definition to your docker-compose.yml

      user: "${UID}:${GID}"
      

      so your file could look like this

      php: # this is my service name
          user: "${UID}:${GID}" # we added this line to get a specific user / group id
          image: php:7.3-fpm-alpine # this is my image
      # and so on
      
    2. set the values in your .env file

      UID=1000
      GID=1001
      

    Now your user in the container has the id 1000 and the group is 1001 and you can set that differently for every environment.

    If you don't use docker-compose or want to know more different approaches to achieve this have a read through my source of information: https://dev.to/acro5piano/specifying-user-and-group-in-docker-i2e

    0 讨论(0)
  • 2020-12-07 16:07

    The bad news is there's no owner/group/permission settings for volume

    0 讨论(0)
  • 2020-12-07 16:12

    Adding rw to the end of the volume mount worked for me:

    services:
        httpd:
            image: apache-image
            ports:
                - "80:80"
            volumes:
                - "./:/var/www/app:rw"
            links:
                - redis
            command: /setupApacheRights.sh
    
    0 讨论(0)
提交回复
热议问题