SMB + Docker
from Dust0741@lemmy.world to selfhosted@lemmy.world on 08 Jan 15:37
https://lemmy.world/post/24028465

Is there a way to setup an SMB share or similar via docker? I want to be able to easily turn it off and bind it to a specific folder, and I am comfortable with docker.

Thanks!

#selfhosted

threaded - newest

mbirth@lemmy.ml on 08 Jan 15:46 next collapse

# https://github.com/ServerContainers/samba

services:
  server:
    image: ghcr.io/servercontainers/samba:latest
    restart: unless-stopped
    network_mode: host
    environment:
      TZ: Europe/London
      MODEL: MacSamba
      SAMBA_GLOBAL_STANZA: "vfs objects = acl_xattr catia fruit streams_xattr; fruit:nfs_aces = no; inherit permissions = yes; fruit:model = MacSamba; fruit:posix_rename = yes; fruit:veto_appledouble = no; fruit:wipe_intentionally_left_blank_rfork = yes; fruit:delete_empty_adfiles = yes; fruit:metadata = stream"
      SAMBA_GLOBAL_CONFIG_load_SPACE_printers: no
      SAMBA_GLOBAL_CONFIG_printing: bsd
      SAMBA_GLOBAL_CONFIG_printcap_SPACE_name: /dev/null
      SAMBA_GLOBAL_CONFIG_disable_SPACE_spoolss: yes
      SAMBA_GLOBAL_CONFIG_min_SPACE_protocol: SMB2
      SAMBA_GLOBAL_CONFIG_bind_SPACE_interfaces_SPACE_only: yes
      SAMBA_GLOBAL_CONFIG_interfaces: lo eth0
      SAMBA_CONF_SERVER_STRING: Docker Host Samba
      #SAMBA_CONF_LOG_LEVEL: 3
      ACCOUNT_shareuser: mypassword
      UID_shareuser: 1000
      # avahi seems to introduce issues with the share
      # "The operation can't be completed because the original item for "xxx" can't be found."
      AVAHI_DISABLE: true
      WSDD2_DISABLE: true
      #NETBIOS_DISABLE: true
      SAMBA_VOLUME_CONFIG_myshare: "[myshare]; path=/shares/myshare; valid users = shareuser; guest ok = no; read only = no; browseable = yes"
    volumes:
      - /path/to/myshare:/shares/myshare

Just make sure you don’t have any local SMB server running on the host. And if you need multiple different shares, these all need to go into the same container or you need to define different ports if you use multiple containers.

Dust0741@lemmy.world on 08 Jan 17:03 next collapse

Awesome thank you!

paraphrand@lemmy.world on 08 Jan 17:58 next collapse

Fruit? Really?

tvcvt@lemmy.ml on 08 Jan 20:30 collapse

That fruit argument is so that samba plays nicely with Apple’s SMB client implementation.

ikidd@lemmy.world on 09 Jan 15:49 collapse

Those are quite the environment variable names there.

mbirth@lemmy.ml on 09 Jan 20:59 collapse

Yes, it’s explained in the documentation.

E.g.:

SAMBA_GLOBAL_CONFIG_bind_SPACE_interfaces_SPACE_only: yes

maps to:

[global]
bind interfaces only = yes

This way you don’t need to provide any extra configuration file.

ikidd@lemmy.world on 10 Jan 01:10 collapse

I’m well aware of how inline environment variables work, but that is one helldammer of a name for one, and I rarely see anyone use actual spaces in .env file variable, let alone translate a space to SPACE in a variable name.

mbirth@lemmy.ml on 10 Jan 03:32 collapse

These variable names are dynamically parsed and used for generating the smb.conf.

And if you need a way to support underscores AND spaces (which are not allowed in a variable name), you have to get creative.

I like the solution as it allows me to encode any possible configuration value (even the most obscure one) in the compose file.

dotslashme@infosec.pub on 08 Jan 16:10 collapse

I use dperson/samba, which is both simple and comes with usage examples.

tuxec@infosec.pub on 08 Jan 17:54 next collapse

The last commit was 5 years ago. There are very high chances the container image is full of vulnerabilities. You might wanna rebuild it yourself.

dotslashme@infosec.pub on 09 Jan 10:46 collapse

Excellent point, thank you!

mbirth@lemmy.ml on 09 Jan 00:46 collapse

There’s dockurr/samba which is also pretty easy to setup, but doesn’t allow much deviation from the defaults.