美文网首页
Docker Samba文件共享踩坑记录

Docker Samba文件共享踩坑记录

作者: lomot | 来源:发表于2019-09-26 10:05 被阅读0次

    ubuntu18.04 默认的 samba 版本号为4.7,这个版本不支持 timemachine,于是准备在docker上搭建,虽然目前还没开起 timemachine 的功能,但是后续有空也许会弄上。

    用的人最多的镜像是dperson/samba,然而官方的例子太少了,只给了常用情况,但我还有一些需求没有满足, 比如使用单独文件存放密码什么的,于是踩了一波坑。

    下面这个是我的完整的 docker 命令

    docker run -itd --name samba --restart=always --net=host \
            -v /etc/localtime:/etc/localtime \
            -v /home/lomot/docker-service/samba/smbpasswd:/etc/samba/smbpasswd \
            -v /nas/samba/smb-share:/share \
            -v /nas/samba/smb-lomot:/lomot \
            dperson/samba -p \
            -i "/etc/samba/smbpasswd" \
            -s "share;/share;no;no;no;lomot,share" \
            -s "lomot;/lomot;no;no;no;lomot"
    

    奇怪的"-p, -v"

    我一开始是在官方的例子上修改,官方的例子是这样的:

    sudo docker run -it -p 139:139 -p 445:445 -d dperson/samba -p \
            -u "example1;badpass" \
            -u "example2;badpass" \
            -s "public;/share" \
            -s "users;/srv;no;no;no;example1,example2" \
            -s "example1 private share;/example1;no;no;no;example1" \
            -s "example2 private share;/example2;no;no;no;example2"
    

    我想要把自己的目录映射到容器内,于是就粗暴地加上了两行

        -v /nas/samba/smb-share:/share \
        -v /nas/samba/smb-lomot:/lomot \
    

    结果提示-v命令没找到,当时我还以为docker更新去掉了-v挂载镜像,仔细看了一波后才发现原来在dperson/samba -p之后的内容全部是私有命令,根本就不是docker的命令,(命令的格式写的和docker一样真的很容易误解啊,后来我在容器内翻了一下,发现这些报错来自一个作者写的脚本samba.sh)。

    密码相关

    官方例子里面的密码是放在命令里面的,就像这样-u "example1;badpass",但是这样总让人觉得不安全,查找文档关于密码是这样解释的

     -i "<path>" Import smbpassword
            required arg: "<path>" - full file path in container
    

    没太看懂。
    后来在一个issue里面找到了用法

    先生成一个 smbpasswd,默认目录在/etc/samba/smbpasswd,当然也可以手动把它放到别的地方

    pdbedit -b smbpasswd -a <username>
    

    然后把它挂载到镜像里面去

    -v /etc/samba/smbpasswd:/etc/samba/smbpasswd
    

    指定密码文件 smbpassword

    -i "/etc/samba/private/smbpasswd"
    

    权限相关

    这个地方官方文档讲的很清楚,我的配置是下面两行这样

    -s "share;/share;no;no;no;lomot,share"
    -s "lomot;/lomot;no;no;no;lomot"
    

    顺便把文档里面的解释复制过来

    -s "<name;>[;browse;readonly;guest;users;admins;writelist;comment]"
           Configure a share
           required arg: "<name>;</name></name;></path>"
           <name> is how it's called for clients
           <path> path to share
           NOTE: for the default values, just leave blank
           [browsable] default:'yes' or 'no'
           [readonly] default:'yes' or 'no'
           [guest] allowed default:'yes' or 'no'
           NOTE: for user lists below, usernames are separated by ','
           [users] allowed default:'all' or list of allowed users
           [admins] allowed default:'none' or list of admin users
           [writelist] list of users that can write to a RO share
           [comment] description of share
    

    端口

    官方例子是这样-p 139:139 -p 445:445指定端口的,但是我后来发现samba还占用了137,138端口,
    没想太多就直接用了host模式--net=host

    查看samba版本

    进入容器之后发现找不到 samba 可执行文件的位置
    最后通过包管理器看到了 samba 版本

    bash-5.0# apk info samba
    WARNING: Ignoring APKINDEX.00740ba1.tar.gz: No such file or directory
    WARNING: Ignoring APKINDEX.d8b2a6f4.tar.gz: No such file or directory
    samba-4.10.8-r0 description:
    Tools to access a server's filespace and printers via SMB
    
    samba-4.10.8-r0 webpage:
    https://www.samba.org/
    
    samba-4.10.8-r0 installed size:
    12288
    

    相关文章

      网友评论

          本文标题:Docker Samba文件共享踩坑记录

          本文链接:https://www.haomeiwen.com/subject/tquguctx.html