Docker 自制镜像:Ubuntu 安装 samba+Webmin

news/2025/2/24 6:41:46

Docker 自制镜像:Ubuntu 安装 samba+Webmin

  • 编写 Dockerfile
  • 构建镜像
  • 运行容器
  • Webmin
    • 访问:Webmin
    • 文件夹权限设置
  • 修复错误
    • 进入 Webmin 后顶部显示错误信息
      • 问题 1:ifconfig 和 ip 命令缺失
      • 问题 2:MD5.pm 模块缺失
    • 提交修改为新镜像
  • 导出 docker 镜像文件
    • 导入
  • samba
    • samba 配置文件
    • 验证配置文件
    • 重启 Samba 服务
    • Windows 访问
      • 1. 创建映射盘用 samba 访问
        • 切换账号登录
      • 2. 资源管理器访问
        • 切换账号登录
  • 省屁吹灯
  • 参考资料

编写 Dockerfile

自己找个合适的位置创建个目录,然后编写 Dockerfile 文件。

这个镜像中就有 webminsamba

# 使用 Ubuntu 22.04 作为基础镜像
FROM ubuntu:22.04

# 设置环境变量,避免交互提示
ENV DEBIAN_FRONTEND=noninteractive

# 备份原始的软件源配置文件,并替换为阿里云镜像源
RUN sed -i 's/archive.ubuntu.com/mirrors.aliyun.com/g' /etc/apt/sources.list \
    && sed -i 's/security.ubuntu.com/mirrors.aliyun.com/g' /etc/apt/sources.list

# 安装 wget 和 gnupg
RUN apt-get update && apt-get install -y \
    wget \
    gnupg \
    && rm -rf /var/lib/apt/lists/*

# 添加 Webmin 软件源
RUN echo "deb http://download.webmin.com/download/repository sarge contrib" >> /etc/apt/sources.list \
    && wget -qO - http://www.webmin.com/jcameron-key.asc | apt-key add -

# 更新系统软件包列表并安装 Samba 和 Webmin
RUN apt-get update && apt-get install -y \
    samba \
    webmin \
    && rm -rf /var/lib/apt/lists/*

# 配置 Webmin 允许远程访问
RUN sed -i 's/ssl=1/ssl=0/' /etc/webmin/miniserv.conf \
    && sed -i 's/allow=127.0.0.1/allow=0.0.0.0/' /etc/webmin/miniserv.conf

# 暴露 Samba 和 Webmin 的端口
EXPOSE 139 445 10000

# 启动 Samba 和 Webmin 服务
CMD service smbd start && service webmin start && tail -f /dev/null

构建镜像

执行构建命令
镜像名:samba-webmin
标签:v1.0
构建上下文的路径:. (默认下 Docker 会到这里找 Dockerfile 文件)

docker build -t samba-webmin:v1.0 .

查看和确认镜像的相关信息:

docker images

运行容器

/data 是我单独挂载的一块6T的硬盘。
我打算把相关文件都放在 /data/samba/ 下。

docker run -d \
  -p 139:139 \
  -p 445:445 \
  -p 10000:10000 \
  -v /data/samba/samba-config:/etc/samba \
  -v /data/samba/shared-data:/shared \
  --name samba-webmin-container \
  samba-webmin:v1.0

Webmin

访问:Webmin

(ip addr 查看IP)
http://172.22.180.148:10000/
Webmin 默认使用系统账户的用户名和密码进行登录认证。

  • 修改密码(前面好像我们没设置过密码,只能修改一下了)
# 宿主机执行进入docker容器内
[jerry@CentOS8 samba]$ docker exec -it samba-webmin-container bash

# 修改 root 密码
root@36e08d19e69b:/# passwd
Enter 新密码: (输入时是看不见的,脑补吧)
Retype 再次新密码: (输入时是看不见的,脑补吧)
passwd: password updated successfully

在这里插入图片描述
语言选一下
在这里插入图片描述
来这设置
在这里插入图片描述
我在 ubuntu 已经创建好了账号,这两个进去走一波。在这里插入图片描述

文件夹权限设置

容器内:

chmod 777 /shared/ 

修复错误

进入 Webmin 后顶部显示错误信息

 致命错误!
Both the ifconfig and ip commands are missing
错误详细信息
Can't locate MD5.pm in @INC (you may need to install the MD5 module) (@INC contains: /usr/share/webmin/vendor_perl /usr/share/webmin /etc/perl /usr/local/lib/x86_64-linux-gnu/perl/5.34.0 /usr/local/share/perl/5.34.0 /usr/lib/x86_64-linux-gnu/perl5/5.34 /usr/share/perl5 /usr/lib/x86_64-linux-gnu/perl-base /usr/lib/x86_64-linux-gnu/perl/5.34 /usr/share/perl/5.34 /usr/local/lib/site_perl /usr/share/webmin/ . ..) at (eval 703) line 1. BEGIN failed--compilation aborted at (eval 703) line 1. : net/linux-lib.pl (line 214)

问题 1:ifconfig 和 ip 命令缺失

ifconfigip 是用于网络配置和管理的常用命令,Webmin 在运行过程中可能会依赖这些命令来获取网络信息。ifconfig 通常包含在 net-tools 软件包中,而 ip 命令包含在 iproute2 软件包中。
解决办法
你需要在 Docker 容器中安装 net-tools 和 iproute2 软件包。进入正在运行的 Docker 容器,执行以下命令:

docker exec -it samba-webmin-container bash
apt-get update
apt-get install -y net-tools iproute2

问题 2:MD5.pm 模块缺失

MD5.pm 是 Perl 语言中用于处理 MD5 哈希算法的模块,Webmin 在运行时需要这个模块,但当前环境中没有安装。
解决办法
在容器内执行以下命令来安装 libmd5-perl 软件包,该软件包包含了 MD5.pm 模块:

apt-get install -y libmd5-perl

提交修改为新镜像

要自己控制一下版本号:之前是 samba-webmin:v1.0 提交后得到新的是 samba-webmin:v1.1

docker commit -a "jerry" -m "安装相关工具,修复Webmin报错" samba-webmin-container samba-webmin:v1.1

docker__130">导出 docker 镜像文件

samba-webmin:v1.2 保存为 samba-webmin-v1.2.tar 文件(我中间又改了一版所以 1.2 了)

docker save -o samba-webmin-v1.2.tar samba-webmin:v1.2

导入

  1. 执行加载命令:在终端中执行以下命令,将镜像文件加载到 Docker 中:
docker load -i samba-webmin-v1.2.tar

其中,-i 选项用于指定要加载的镜像文件的路径。如果镜像文件位于其他目录,需要使用完整的路径,例如:

docker load -i /home/user/images/samba-webmin-v1.2.tar
  1. 查看
docker images
  1. 运行。跟前面一样,只是这次镜像名叫 samba-webmin:v1.2
    运行容器

samba_153">samba

samba__154">samba 配置文件

最终如下:samba,sambaadm 两个账号,一个只读,一个可读写。

# [global] 部分定义了 Samba 服务器的全局设置,会影响整个 Samba 服务的行为
[global]
    # workgroup 指定了 Samba 服务器所属的工作组名称
    # 通常在 Windows 网络环境中,同一工作组内的计算机可以互相发现和共享资源
    # 这里设置为 WORKGROUP,是一个常见的默认工作组名称
    workgroup = WORKGROUP

    # server string 是服务器的描述信息
    # %v 是一个占位符,会被 Samba 服务器的版本号替换
    # 此描述信息会在客户端浏览网络时显示,用于标识该 Samba 服务器
    server string = Samba Server %v

    # netbios name 是 Samba 服务器在 NetBIOS 网络中的名称
    # NetBIOS 是早期用于局域网中计算机名称解析和资源共享的协议
    # 这里将服务器的 NetBIOS 名称设置为 ubuntu-samba
    netbios name = ubuntu-samba

    # security 设置了 Samba 服务器的安全级别
    # user 表示使用用户级别的安全认证,客户端需要提供有效的用户名和密码才能访问共享资源
    security = user

    # map to guest 控制着认证失败时的处理方式
    # Bad User 表示将认证失败的用户映射为无效用户,禁止其以匿名访客身份访问
    map to guest = Bad User

    # dns proxy 决定 Samba 服务器是否作为 DNS 代理
    # 设置为 no 表示不启用 DNS 代理功能
    dns proxy = no

    # disable netbios 用于禁用 NetBIOS 服务
    # NetBIOS 存在一些安全风险,禁用它可以提高服务器的安全性
    # 设置为 yes 表示禁用 NetBIOS 服务
    disable netbios = yes

    # server min protocol 指定了 Samba 服务器支持的最小 SMB 协议版本
    # 设置为 SMB2 表示只支持 SMB2 及以上版本的协议,SMB2 有更好的性能和安全性
    server min protocol = SMB2

    # null passwords 控制是否允许使用空密码登录
    # 设置为 no 表示禁止使用空密码登录,增强了服务器的安全性
    null passwords = no

# [jerry_samba] 部分定义了一个名为 jerry_samba 的共享文件夹
[jerry_samba]
    # comment 是对该共享文件夹的描述信息
    # 用于在客户端浏览共享资源时提供说明
    comment = Shared Files

    # path 指定了共享文件夹在服务器上的实际路径
    # 这里设置为 /shared,表示将服务器上的 /shared 目录作为共享文件夹
    path = /shared

    # browsable 决定该共享文件夹是否在网络中可见
    # 设置为 yes 表示客户端可以在网络中浏览到这个共享文件夹
    browsable = yes

    # read only 控制用户对共享文件夹的读写权限
    # 设置为 yes 表示默认情况下用户只有只读权限,不能对文件夹中的文件进行修改、删除或创建操作
    read only = yes

    # valid users 指定了哪些用户可以访问该共享文件夹
    # 这里列出了 sambasambaadm 两个用户,只有这两个用户可以连接到该共享
    valid users = samba, sambaadm

    # write list 指定了哪些用户具有写入权限
    # 只有 sambaadm 用户可以在该共享文件夹中创建、修改和删除文件
    write list = sambaadm

    # guest ok 控制是否允许匿名访客访问该共享文件夹
    # 设置为 no 表示禁止匿名用户访问,必须使用 valid users 列表中的用户进行认证
    guest ok = no

复制粘贴,保存。
在这里插入图片描述 在这里插入图片描述

验证配置文件

testparm

在这里插入图片描述

重启 Samba 服务

在这里插入图片描述

Windows 访问

samba__240">1. 创建映射盘用 samba 访问

cmd 执行以下命令后,资源管理器中会多出一个Z

net use Z: \\172.22.180.148\jerry_samba /user:samba samba
切换账号登录
  1. 先右键断开它 (Z盘符占着呢,我不想换别的盘符)
    在这里插入图片描述
  2. 我是WIN11,其他系统位置可能不太一样,自己找找。
    在这里插入图片描述
  3. 勾上这个就能换账号了
    在这里插入图片描述

2. 资源管理器访问

WIN + E 打开windows资源管理器,输入 \\172.22.180.148
在这里插入图片描述

切换账号登录
  1. 如果已经登录过,想要切换用户需要打开 凭据管理器,删除与 Samba 服务器相关的旧凭据。
    WIN + R 输入 control keymgr.dll 回车。
    在这里插入图片描述
  2. 再把网络连接断开。
    * 是全部,可以替换成具体连接如 \\172.22.180.148 有哪些远程网络连接可以用 net use 查看。
    net use * /delete
    
    记得关掉命令行窗口,然后等一会(我测试1分钟内OK),再去访问就会提示我们输入密码了。

省屁吹灯

samba 跑起来后 Webmin 我就用不上了。不停了它朕心难安。

# 宿主机执行进入docker容器内
[jerry@CentOS8 samba]$ docker exec -it samba-webmin-container bash
# 停止 Webmin 服务
service webmin stop
# 查看 Webmin 服务状态,确认是否停止成功                                                                     
service webmin status 
  • 需要时再启动它
# 启动 Webmin 服务
service webmin start

参考资料

https://webmin.com/


http://www.niftyadmin.cn/n/5864042.html

相关文章

骁勇善战的量化利器:多因子模型【量化理论】

我叫补三补四,很高兴见到大家,欢迎一起学习交流和进步 今天来讲一讲alpha策略制定后的测试问题 风险模型雏形 股票因子受多种因素影响,其价格由多种因素决定,所谓的多因子策略就是要发掘诸如此类的因子,以一种合理的方…

23贪心算法

分发饼干 class Solution { public:int findContentChildren(vector<int>& g, vector<int>& s) {int i0,j0;int count0;sort(s.begin(),s.end());sort(g.begin(),g.end());while(i<g.size()&&j<s.size()){if(g[i]<s[j]){i;j;count;}else…

突破“第一崇拜“:五维心理重构之路

一、视频介绍 在这个崇尚"第一"的时代&#xff0c;我们如何找到自己的独特价值&#xff1f;本视频将带您踏上五维心理重构之旅&#xff0c;从诗意人生的角度探讨如何突破"圣人之下皆蝼蚁"的局限。我们将穿越人生的不同阶段&#xff0c;从青春的意气风发到…

w803|联盛德|WM IoT SDK2.X测试|pinout|(2):w803开发板简介

概述 W803-Pico是一款基于联盛德W803芯片为主控的开发板&#xff0c;支持IEEE802.11 b/g/n Wi-Fi&#xff0c;以及BT/BLE4.2协议蓝牙。芯片内置高性能32位处理器&#xff0c;主频高达240MHz。内置2MB Flash以及288KB RAM。硬件采用DIP封装&#xff0c;PCB板载天线&#xff0c;…

CSS中的`position`属性的几种定位方式

CSS中的position属性用于控制元素的定位方式&#xff0c;主要有以下几种值&#xff1a;static、relative、absolute、fixed、sticky。每种定位方式的行为不同&#xff0c;下面详细讲解&#xff1a; 1. static&#xff08;默认值&#xff09; 特点&#xff1a; 元素按照正常的文…

记一次复杂分页查询的优化历程:从临时表到普通表的架构演进

1. 问题背景 在项目开发中&#xff0c;我们需要实现一个复杂的分页查询功能&#xff0c;涉及大量 IP 地址数据的处理和多表关联。在我接手这个项目的时候,代码是这样的 要知道代码里面的 ipsList 数据可能几万条甚至更多,这样拼接的sql,必然是要内存溢出的,一味地扩大jvm参数不…

解决jupyter notebook不是内部或外部命令问题

我们打开cmd有的时候&#xff0c;输入jupyter notebook&#xff0c;发现会提示jupyter 不是内部或外部命令&#xff0c;也不是可运行的程序或批处理文件。遇到这个问题我们应该怎么解决呢? 没错就是添加环境变量&#xff01; Step01&#xff1a;在电脑中找到jupyter notebook的…

NIO-Reactor模型梳理与demo实现

关于NIO&#xff0c;我们在上一篇 linux下网络编程socket&select&epoll的底层实现原理 就介绍了网络阻塞IO、以及基于事件驱动的非阻塞IO。对于NIO的API基本使用是java提供的接口&#xff0c;然后我们在业务上对NIO的使用&#xff0c;也是有不同的使用方法的。然后在我…