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 directory is created under root:root
. How can I specify the user of the mounted directory?
I tried to run command setupApacheRights.sh
. chown -R www-data:www-data /var/www
but it says chown: changing ownership of '/var/www/somefile': Permission denied
services:
httpd:
image: apache-image
ports:
- "80:80"
volumes:
- "./:/var/www/app"
links:
- redis
command: /setupApacheRights.sh
I would prefer to be able to specify the user under which it will be mounted. Is there a way?
To achieve the desired behavior without changing owner / permissions on the host system do the following steps.
add the definition to your docker-compose.yml
so your file could look like this
set the values in your
.env
fileNow 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
If you're using Docker, you want this directly in your config rather than performing manual steps every time you build an image. The bad news is there's no owner/group/permission settings for
volume
as of 2019First determine the uid of the
www-data
user:Then, on your docker host, change the owner of the mounted directory using the uid (100 in this example):
Dynamic Extension
If you are using
docker-compose
you may as well go for it like this:You can put that in a one-liner:
The
-u
flag will only print theuid
to stdout.