Mount it locally. Then reference the local mount in your docker command or compose file.
Selfhosted
A place to share alternatives to popular online services that can be self-hosted without giving up privacy or locking you into a service you don't control.
Rules:
-
Be civil: we're here to support and learn from one another. Insults won't be tolerated. Flame wars are frowned upon.
-
No spam posting.
-
Posts have to be centered around self-hosting. There are other communities for discussing hardware or home computing. If it's not obvious why your post topic revolves around selfhosting, please include details to make it clear.
-
Don't duplicate the full text of your blog or github here. Just post the link for folks to click.
-
Submission headline should match the article title (don’t cherry-pick information from the title to fit your agenda).
-
No trolling.
Resources:
- selfh.st Newsletter and index of selfhosted software and apps
- awesome-selfhosted software
- awesome-sysadmin resources
- Self-Hosted Podcast from Jupiter Broadcasting
Any issues on the community? Report it using the report flag.
Questions? DM the mods!
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.
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.
This is the way I do it
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.
Mount the network share (fstab or mount.cifs), and pass the login using the username= and password= 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?
Yes ☺️
I have a similar setup, I have two servers, one with the arr stack and the other is a NAS server.
I’m my fstab I mount he network drive to say /media, then the docker containers can just have Volume: /media:/media or whatever. If you need more specifics I can look when I get home.
Thanks. Looks good. Simple enough.
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/Plex
Hope this helps.
That helps. And it answers my question about the credentials. Thank you.
I tried it with NFS vol mounted in the compose but had disconnection issues.
In the end I mounted it on the host.
But I don't know the exact issue why I had it.
It's been a while so I am relying on some janky notes:
Prep:
spoiler
Create a Mount Point:
sudo mkdir /mnt/myhdd
Mount the HDD:
sudo mount /dev/sdb1 /mnt/myhdd
Verify the Mount:
df -h
Install Samba (if not already installed):
sudo apt update
sudo apt install samba
Configure Samba:
sudo nano /etc/samba/smb.conf
Add 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 = yes
Set Samba Password:
sudo smbpasswd -a yourusername
Restart Samba:
sudo systemctl restart smbd
To make the HDD mount automatically at boot, add the following line to /etc/fstab:
/dev/sdb1 /mnt/myhdd ext4 defaults 0 2
make 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 slashes
Adjust 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.