Alex
Alex

Reputation: 3431

Docker volume mount and permissions: www-data on host (33) becomes xfs (33) in Alpine Linux

I have trouble with a Directory mount from my host in a docker container:

This is a fullstack situation: I am using a service stack to make files available on local lan. the stack uses nginx:alpine, images are made available - so I cannot easily modify the Dockerimage.

Is there anything that I can do that xfs inside the Alpine Linux image does't get user and group id 33?

I tried to set PUID and PGID in the docker-compose.yml, but it doesn't work (I also have trouble understanding this):

services:
celeryworker:
    environment:
      - PUID=33
      - PGID=33

Minimal reproducable example:

Files on the host:
cd /mnt/nfs/folder1
ls -alh
>-rwxr-xr-x 1 www-data www-data 3.5M Sep 21 15:41 '02 - track.mp3'
ls -alhn
>-rwxr-xr-x 1 33 33 3.5M Sep 21 15:41 '02 - track.mp3'
less /etc/passwd | grep www-data
>www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
docker-compose.yml
version: "3"

services:
  celeryworker:
    restart: unless-stopped
    image: funkwhale/funkwhale:1.0.1
    networks:
      - default
    depends_on:
      - postgres
      - redis
    command: celery -A funkwhale_api.taskapp worker -l INFO --concurrency=0
    environment:
      - C_FORCE_ROOT=true
    volumes:
      - "/mnt/nfs/:/music:ro"
Files in the container:
docker exec -it funkwhale_celeryworker_1 /bin/bash
cd /music/folder1/
ls -alh
>-rwxr-xr-x    1 xfs      xfs         3.4M Sep 21 13:41 '02 - track1.mp3'
ls -alhn
>-rwxr-xr-x    1 33      33         3.4M Sep 21 13:41 '02 - track1.mp3'
su xfs
>This account is not available
less /etc/passwd | grep xfs
>xfs:x:33:33:X Font Server:/etc/X11/fs:/sbin/nologin

Upvotes: 11

Views: 7716

Answers (2)

Anatolie
Anatolie

Reputation: 29

More details with different solutions in this gist

Upvotes: 1

rtribaldos
rtribaldos

Reputation: 1277

Late reply, but maybe it could help somebody else.. The UID:GID for www-data in Debian/Ubuntu doesn't match with the IDs in Alpine:

user : group Debian/Ubuntu (uid:gid) Alpine (uid:gid)
www-data : www-data 33 : 33 82 : 82
xfs : xfs - 33 : 33

If your host folder is owned by www-data:www-data (33:33), then inside the Alpine container this uid:gid is going to match with the uid:gid of xfs:xfs and you will have problems with the permissions.

To solve this issue you can change the ownership in the host to 82:82:

$ sudo chown -R 82:82 host_directory

Upvotes: 14

Related Questions