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 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.
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.
no, it’s actually preferable that you don’t.
docker volume manager will actually mount it for you, you can see where using the “docker volume inspect {name}” command.
This is the way I do it