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.

  • Jaypg@lemmy.jaypg.pw
    link
    fedilink
    English
    arrow-up
    0
    ·
    4 months ago

    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.

    • modus@lemmy.worldOP
      link
      fedilink
      English
      arrow-up
      0
      ·
      4 months ago

      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.

      • GreenKnight23@lemmy.world
        link
        fedilink
        English
        arrow-up
        0
        ·
        4 months ago

        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.

    • modus@lemmy.worldOP
      link
      fedilink
      English
      arrow-up
      0
      ·
      4 months ago

      Thank you. So the un/pw is only entered in the Ubuntu mount, not in the Docker file?

    • spiffpitt@lemmy.world
      link
      fedilink
      English
      arrow-up
      0
      ·
      4 months ago

      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?

      • roofuskit@lemmy.world
        link
        fedilink
        English
        arrow-up
        0
        ·
        4 months ago

        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.

  • LadyMeow@lemmy.blahaj.zone
    link
    fedilink
    English
    arrow-up
    0
    ·
    4 months ago

    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.

  • damnthefilibuster@lemmy.world
    link
    fedilink
    English
    arrow-up
    0
    ·
    4 months ago

    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.

    • modus@lemmy.worldOP
      link
      fedilink
      English
      arrow-up
      0
      ·
      4 months ago

      That helps. And it answers my question about the credentials. Thank you.