wernight/docker-mopidy

PermissionError: [Errno 13] Permission denied

Opened this issue · 3 comments

pinq- commented

Hi
I'm trying to run this docker with this composer:

  mopidy:
    container_name: mopidy
    image: wernight/mopidy
    volumes:
      - ${USERDIR}/kontit/mopidy/local:/var/lib/mopidy/local
      - ${USERDIR}/kontit/mopidy/config:/var/lib/mopidy/.config/
      - /run/user/{$PUID}/pulse:/run/user/105/pulse:ro
    ports:
      - 6600:6600
      - 6680:6680
    user: ${PUID}:${PGID}

But when I try to run it, I get this error in the logs:

Traceback (most recent call last):
  File "/usr/bin/mopidy", line 11, in <module>
    load_entry_point('Mopidy==3.1.1', 'console_scripts', 'mopidy')()
  File "/usr/lib/python3/dist-packages/mopidy/__main__.py", line 62, in main
    create_core_dirs(config)
  File "/usr/lib/python3/dist-packages/mopidy/__main__.py", line 157, in create_core_dirs
    path.get_or_create_dir(config["core"]["config_dir"])
  File "/usr/lib/python3/dist-packages/mopidy/internal/path.py", line 23, in get_or_create_dir
    dir_path.mkdir(mode=0o755, parents=True)
  File "/usr/lib/python3.7/pathlib.py", line 1251, in mkdir
    self._accessor.mkdir(self, mode)
PermissionError: [Errno 13] Permission denied: '/var/lib/mopidy/.config/mopidy'

The user is in the docker group and all the other container are working. Any idea what to do?

Hello, I'm trying to make it work as you. As I understood it correctly, when you run the container as your user to give access to the pulse folder, then you are trying to run "mopidy" not as mopidy-user but as you. So I think that is needed to give the same mopidy permission to the user passed as parameter when launching the container.

I was looking at the TheBiggerGuy example here for creating a new user but I'm not quite sure how to do it. If I can make it work, I'll write back

Ok, well I found a solution, maybe not the cleanest one.

I've built another Dockerfile on top of the one provided by this repo adding a new user inside the group 29 (audio) and then give it some permissions

the dockerfile:

FROM wernight/mopidy

USER root

ARG USER_ID

ENV HOME=/var/lib/mopidy
RUN set -ex \
 && adduser --disabled-password --gecos '' --uid $USER_ID --gid 29 user \
 && usermod -G audio,sudo user \
 && chown user:audio -R $HOME /entrypoint.sh \
 && chmod go+rwx -R $HOME /entrypoint.sh

USER mopidy

ENTRYPOINT ["/usr/bin/dumb-init", "/entrypoint.sh"]
CMD ["/usr/bin/mopidy"]

HEALTHCHECK --interval=5s --timeout=2s --retries=20 \
    CMD curl --connect-timeout 5 --silent --show-error --fail http://localhost:6680/ || exit 1

docker build command:

docker build -f <custom_dockerfile> -t mopidy/localuser --build-arg USER_ID=$(id -u) .

and then run:

docker run --rm -it \
-p 6600:6600 -p 6680:6680 \
-v /run/user/$UID/pulse:/run/user/105/pulse \
-v <insert here other volumes for media files> mopidy/localuser

Just to expand on this...

I have spent the last two days trying to get this containers permissions working.

If don't map the local and media directories and let the container create them... they are created as root and I get permission errors (creating the images folder etc.).

If I map the local and media directories they get the permissions of what I set on the host (I have to create the images directory too or it fails to create) - this gets things working initially...

I tried to map playlists and m3u directories to make them persistent (not sure why they aren't? - wouldn't you lose playlists on container recreation?) and now that fails. Unmapped it fails, mapped it fails - this is using the Mopidy-Iris web extension I used Mopidy-MusicBox-Webclientand was able to get a playlist created... but not with Mopidy-Iris.

Overall my impression has been... permissions are a cluster... at least for me. I have had nothing but trouble getting permissions straightened out... seems like it's a constant battle and the only thing that seems to work constantly is just running as root... which is NOT ideal...

DeadEnd