I'm new to Docker, but I'm trying to deploy some containers that will need to read and write to a network shared volume. I'm hoping to run things like Navidrome, Immich, and an Arr Stack. The containers are on Ubuntu and my network volume is on a qnap machine. It is discoverable from Ubuntu without issue.

Do I need to mount the shared volume in Ubuntu or can I just refer to it in the Docker Compose file?

I know I need to mention the location of the volume in the Docker Compose file, but I'm not sure how to write that. How do I include the un/pw information for the NAS?

I read about bind mounts in Docker's documentation. Is that what I want to use? Again, how do I include the un/pw information? I'm not sure how to use the commands.

The volume path for the navidrome folder is //tiger-nas/music/music for example.

I appreciate any help.

you are viewing a single comment's thread
view the rest of the comments
[–] 12 points 8 months ago (2 children)

You could mount the network share on the host/Ubuntu and then reference it in your docker compose file. It works. I prefer to write the mount in the Docker compose file since it's a bit more portable. Something like this depending on if you're using SMB/CIFS or NFS:

services:
    some_music_app:
        image: music_app_image:latest
    container_name: music_app
    volumes:
      - smb:/some/path/smb/music
      - nfs:/some/path/nfs/music
volumes:
  smb:
    driver_opts:
      type: cifs
      o: "username=${user},password=${pass},uid=1000,gid=1000,vers=3.0"
      device: "//tiger-nas/music/music"
  nfs:
    driver: local
    driver_opts:
      type: nfs
      o: addr=tiger-nas,nolock,soft,rw,nfsvers=4
      device: ":path/to/music/music"

The ${user} and ${pass} in the smb volume definition are variables that you'll need to have in a .env file next to your compose.yaml file. The .env file is just a normal text file with each line setting a value to a variable. Like:

user=my_username  
pass=123_abc_!@#

Then you restrict the permissions of your .env file and you can essentially take a backup of both files and use them on any server with Docker.

  • source
  • hideshow 4 child comments
  • [–] [S] 3 points 8 months ago (1 child)

    I guess this is one of my big questions. If I mount it in the YAML file, do I still have to mount it in Ubuntu? Thank you for this.

  • source
  • parent
  • hideshow 2 child comments