摘要
本篇文章旨在指导您如何在 Mac 上使用 Docker 容器来安装并运行宝塔面板,以便高效管理 LNMP 开发环境。在本文的最终目标中,我们将实现:通过启动 Docker 容器自动加载 Ubuntu 系统,且容器中的宝塔面板、Nginx、MySQL、PHP、Redis 等关键服务也将自动启动。同时,配置在 supervisord 中的各项任务也能够在容器启动时自动运行,以保证整个开发环境高效、稳定地自启动。
前期准备
以下是文章最后完成目标时使用的 Docker 启动命令,命令后附详细参数说明。
-d: 以守护进程(detached mode)方式运行容器。使用 -d 后,容器会在后台运行,你的终端不会保持连接,这样可以让容器一直在后台运行而不占用当前的终端窗口
-p:用于将宿主机的端口映射至容器内的端口,例如 -p 8888:8888 使宿主机的 8888 端口对应到容器中宝塔面板的访问端口,方便通过浏览器访问。(可以根据你的实际需要进行设置)
--privileged=true:为容器授予额外的权限,支持 systemd 功能以实现服务管理。
--restart always:设置容器为自启动模式,即使宿主机重启也会自动启动容器。
-v:将宿主机路径与容器路径做目录挂载
例如 -v /Users/(你的实际名称)/www:/www/wwwroot 把我本地的项目文件进行挂载到容器访问,便于 Nginx 和宝塔管理网站文件。
-v ubuntu:/www 是我在 Docker 中创建了一个名为 Ubuntu 的 Volumes,用来存储 ubuntu 环境中宝塔面板的一些配置和修改。
--name:为容器指定一个易于管理的名称,此处为 ubuntu。
my-ubuntu-image:自定义镜像名,指向已安装 systemd 和配置的基础 Ubuntu 环境。
/usr/sbin/init:设定容器启动时运行 /usr/sbin/init,确保 systemd 能够加载并管理各项服务,实现全面的服务自启动。


对于想要更简单的部署方式,可以考虑使用海外 VPS 服务商提供的预装环境,这样可以避免复杂的 Docker 配置过程。
环境准备
确保已经在 Mac 上安装了 Docker Desktop。如果未安装,可以在 Docker 官网 下载并安装。
一、创建并配置 Ubuntu 容器
1。创建基本 Ubuntu 22.04 容器
首先,创建一个基础的 Ubuntu 22.04 容器。由于安装 systemd 需要完整的 init 系统支持,因此直接从 Ubuntu 官方镜像开始。
拉取官方 ubuntu22.04 镜像
使用镜像创建新的容器
-it:指定运行容器时启用交互式终端模式,以便查看实时输出和交互。
这条命令用于拉取并启动 Ubuntu 22.04 容器,并进入 Bash 环境中。
2。安装 systemd 和 init 模块
进入容器后,首先安装常用工具
安装 systemd 和 init 模块,这样可以使容器具备基本的服务管理功能(宝塔面板依赖 systemd 来管理服务的启动和停止)。
这条命令会安装 systemd 和 init,使容器能够运行完整的服务管理系统。
3。提交容器为新的镜像
由于修改了容器的系统配置,先退出容器,再将其保存为新的镜像,以便后续使用:
该命令会将当前的 ubuntu 容器保存为名为 my-ubuntu-image 的新镜像,用于后续的宝塔面板安装。
二、启动带 systemd 支持的容器并配置端口映射
为了让新的镜像支持服务的启动和停止(如宝塔和 supervisord 服务),在启动时要将 /usr/sbin/init 设为容器启动的命令。同时映射常用的端口,以便 Mac 和容器之间互通。
1。创建 volume

2。删除原容器 & 运行新镜像
删除原来的 ubuntu 容器
使用新的镜像创建并运行容器,并加入端口映射和挂载目录,如下所示:
3。启动并测试 systemd
启动容器
进入 ubuntu 控制台
可以测试 systemd 是否正常工作:
如果 systemctl 正常工作,说明服务管理功能已成功配置。
三、在 Ubuntu 容器中安装宝塔面板
接下来,在容器中安装宝塔面板:
1。下载并安装宝塔面板
使用官方安装脚本来安装宝塔面板。首先进入容器:
然后下载并运行宝塔安装脚本:
安装完成后,宝塔会生成访问地址和初始账户信息 (登录账户和密码记得保管)。
2。修改宝塔登录默认端口为 8888
安装完成后可以修改宝塔登录端口为 8888
容器中输入 bt 回车 -> 8 回车 -> 8888 回车

3。测试面板访问
打开浏览器,访问 http://127.0.0.1:8888,输入用户名和密码,进入宝塔面板。宝塔面板安装完成后,可以在这里安装并管理 LNMP 环境。
四、使用宝塔安装 LNMP 环境
在宝塔面板中,轻松配置和安装 Nginx、MySQL、PHP 等开发环境:
1。进入宝塔软件商店,在首页点击"软件商店",找到以下组件并安装:
Nginx: Web 服务器
MySQL:数据库管理系统
PHP:运行 PHP 代码的解释器
Redis:缓存系统(可选)
Supervisord:系统进程管理
通过宝塔安装后,所有服务会自动运行。你也可以通过宝塔的服务管理页面来控制每个组件的启动和停止。
2。配置 Supervisord
可以使用 Supervisord 来管理 Nginx、MySQL、PHP、Redis 等工具,监控到服务停止运行后重启即可
3。测试自动重启
关闭当前 ubuntu 容器并使用浏览器访问宝塔面板
启动 ubuntu 容器并使用浏览器访问宝塔面板
4.SSH 连接配置
Docker ubuntu:22.04 镜像默认不会安装 ssh 服务,所以需要手动安装 ssh 服务并启动,不然宝塔面板中的终端功能将不可用
安装 SSH 服务:
启动 ssh 服务
查看宝塔面板中的终端功能是否可用:

5. Mysql 配置
安装完 Mysql 服务后默认不会对外开放 root 用户的链接权限,需要手动设置,下面是配置 mysql 的 root 用户对外连接权限
终端中使用 root 用户登录 mysql:
Mysql 的 root 默认密码查看可以在宝塔面板 -> 数据库 -> root 密码 中找到

创建对外连接权限的 root 用户并给到最高权限:
开放外部地址可以访问 mysql 服务:
在 mysql 的【mysqld】配置下添加 bind-address = 0.0.0.0

配置修改后重启 Mysql 服务,然后在宿主机上测试连接 Mysql:

6.Redis 的配置
开放外部地址访问 redis 权限:
把 Redis 配置中的 bind 127.0.0.1 改为 bind 0.0.0.0

修改 Redis 配置文件禁用保护模式,把 protected-mode no 改为 protected-mode yes

配置保存后重启 Redis 服务,然后在宿主机上测试 redis 连接

对于需要快速部署生产环境的用户,海外云服务器提供预装的宝塔面板镜像,可以大大简化部署流程。
五、常见问题及解决方案
宝塔安装的 supervisord 无法运行
在 ubuntu 中执行 systemctl restart supervisord 会遇到以下报错:
System has not been booted with systemd as init system (PID 1). Can't operate
意味着你的系统没有使用 systemd 作为初始化系统,因此,systemctl 命令无法运行,因为它是 systemd 的工具。只需要按照上面步骤 启动带 systemd 支持的容器就可以了。
还有一种方式是直接使用自带 systemd 的 Ubuntu 镜像,下面是找到的一个镜像,但是本人没有尝试:
宝塔 Redis 无法启动/启动失败
查看 Redis 日志后发现了 设置 Locale 警告,如果出现 locale 错误提示,日志错误如下:
Failed to configure LOCALE for invalid locale name.
这个错误通常是因为 Redis 尝试配置 Locale 时未找到有效的 Locale 设置。可以通过以下方式解决:
然后在宝塔面板重启 redis 服务即可
如果遇到复杂的服务器配置问题,建议参考开发环境 VPS的技术支持文档,或者直接使用预配置的环境来避免这些技术细节。