dockerfile

FROM ubuntu:latest

LABEL author="king"

EXPOSE 445 139

RUN set -ex && \
    sed -i s@/archive.ubuntu.com/@/mirrors.tuna.tsinghua.edu.cn/@g /etc/apt/sources.list && \
    apt clean && \
    apt update && \
    apt -y install samba && \
    echo "useradd -r -s /usr/sbin/nologin -u \$UID \$NAME &> /dev/null" >> /root/start.sh && \
    echo 'echo "$PASSWD\n$PASSWD" | smbpasswd -a $NAME' >> /root/start.sh && \
    echo "/etc/init.d/smbd start" >> /root/start.sh && \
    echo "/bin/bash" >> /root/start.sh && \
    chmod u+x /root/start.sh

CMD /root/start.sh

末尾 /bin/bash 防止容器直接退出

构建镜像

$ docker build -t mysamba:latest .

配置 Samba

本地创建 smb.conf 配置文件,参考 Samba 安装及配置

[global]
workgroup = Home
netbios name = king's laptop
server string = king's SambaServer
display charset = UTF8
#interfaces = wlp2s0
#hosts allow = 192.168.1.
deadtime = 10
log file = /var/log/samba/log.%m
max log size = 50
map to guest = Bad User
max connections = 0

# 可guest登录,可读,指定用户可写
[Shared]
path = /home/king/Shared
security = share
public = yes
writable = yes
write list = king
available = yes
browseable = yes

# 需要用户登录,可读写
[Private]
path = /home/king
public = no
valid users = king
create mask = 0664
directory mask = 0775
available = yes
browseable = yes
writable = yes
write list = king

运行容器

$ docker run -it --rm -d \
    --name samba \
    -e UID=1000 \
    -e NAME=king \
    -e PASSWD=abcd12345 \
    -p 445:445 \
    -p 139:139 \
    -v /home/king/Docker/samba/:/etc/samba:ro \
    -v /home/king:/home/king:rw \
    -v /home/king/Shared:/home/king/Shared:rw \
    mysamba

/home/king/Docker/sambasmb.conf 文件所在目录

/home/king/home/king/Public 这两个目录是在 smb.conf 中配置的共享目录。