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.
Mount it locally. Then reference the local mount in your docker command or compose file.
I’m constantly seeing this advice, dispite docker supporting nfs volumes. How do you handle docker starting containers before the shares are mounted? making the docker service as a whole wait for network mounts? what about containers that dont need to wait for a network drive?
Honestly I’ve never had that issue, but if you use compose you can delay the start of a container and use the “depends-on” function to hold any other containers. But yes docker supports both NFS and SMB.
Thank you. I’ll try.
My network shared folders are on a windows 11 (yes, I know. It’s shit.) pc and my docker is running on Linux.
Here’s what my mounts look like -
volumes: plex: driver: local driver_opts: type: cifs o: username=pc_username,password=pc_password,vers=3.0,file_mode=0777,dir_mode=0777 device: //10.0.0.3/PlexHope this helps.
That helps. And it answers my question about the credentials. Thank you.
Mount the network share (
fstabormount.cifs), and pass the login using theusername=andpassword=mount options. Then point the volume at the mount point’s path.https://www.mattnieto.com/how-to-mount-an-smb-share-to-a-docker-container-step-by-step/
Thank you. So the un/pw is only entered in the Ubuntu mount, not in the Docker file?
It’s been a while so I am relying on some janky notes:
Prep:
spoiler
Create a Mount Point:
sudo mkdir /mnt/myhddMount the HDD:
sudo mount /dev/sdb1 /mnt/myhddVerify the Mount:
df -hInstall Samba (if not already installed):
sudo apt update sudo apt install sambaConfigure Samba:
sudo nano /etc/samba/smb.confAdd the following at the end of the file:
[MyHDD] path = /mnt/myhdd available = yes valid users = yourusername read only = no browsable = yes public = yes writable = yesSet Samba Password:
sudo smbpasswd -a yourusernameRestart Samba:
sudo systemctl restart smbdTo make the HDD mount automatically at boot, add the following line to /etc/fstab:
/dev/sdb1 /mnt/myhdd ext4 defaults 0 2make you replace /dev/sdb1 and /mnt/myhdd with your actual device and mount point.
Compose File:
spoiler
services: navidrome: image: deluan/navidrome:latest user: 0:0 # should be owner of volumes ports: - "14533:4533" restart: always environment: {} # Empty mapping - valid and fixes the error # Optional: put your config options here. Examples: # ND_LOGLEVEL: debug # ND_SCANSCHEDULE: "@every 5m" volumes: - "/docker-data/navidrome/:/data" - "/mnt/myhdd/your/path/goes/here:/music:ro" # Use forward slashesAdjust as necessary or applicable. Maybe this will get you headed in the right direction. It’d be helpful if someone double checked my notes. I get nervous when giving instructions. LOL Also it should go without saying that you should do your due diligence verifying any code copied off the internet. Not responsible for ingrown toenails, loose stool, or blurred vision.



