在 Mac 上使用 Docker 安装宝塔并部署 LNMP 环境

作者:Administrator 发布时间: 2026-01-12 阅读量:2 评论数:0

前言

本文旨在提供一套完整的实操指南,指导用户在 macOS 上利用 Docker 容器化技术部署宝塔面板。不同于基础安装,本方案侧重于**“高可用自启动”**的实现:通过优化配置,使容器在启动瞬间即可自动拉起 Ubuntu 系统底层及全套 LNMP 堆栈(含 Redis)。同时,借助 supervisord 对容器内进程进行深度托管,保证开发环境在任何重启场景下都能保持高效、稳定的运行状态。

前期准备

以下是文章最后完成目标时使用的 Docker 启动命令,命令后附详细参数说明。

docker run -d \

    -p 8888:8888 \

    -p 888:888 \

    -p 80:80 \

    -p 443:443 \

    -p 20:20 \

    -p 21:21 \

    -p 3306:3306 \

    -p 3322:22 \

    -p 6379:6379 \

    -p 9501:9501 \

    --privileged=true \

    --restart always \

    -v ubuntu:/www \

    -v /Users/(你的实际名称)/www:/www/wwwroot \

    --name ubuntu \

    my-ubuntu-image /usr/sbin/init

-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 能够加载并管理各项服务,实现全面的服务自启动。

Snipaste_2026-01-12_14-33-20.png

Snipaste_2026-01-12_14-33-34.png

环境准备

确保已经在 Mac 上安装了 Docker Desktop。如果未安装,可以在 Docker 官网 下载并安装。

一、创建并配置 Ubuntu 容器

1.创建基本 Ubuntu 22.04 容器

首先,创建一个基础的 Ubuntu 22.04 容器。由于安装 systemd 需要完整的 init 系统支持,因此直接从 Ubuntu 官方镜像开始。

拉取官方ubuntu22.04镜像

docker pull ubuntu:22.04

使用镜像创建新的容器

docker run -it --name ubuntu ubuntu:22.04 /bin/bash

-it:指定运行容器时启用交互式终端模式,以便查看实时输出和交互。

这条命令用于拉取并启动 Ubuntu 22.04 容器,并进入 Bash 环境中。

2.安装 systemd 和 init 模块

进入容器后,首先安装常用工具

apt install -y wget sudo bash curl vim net-tools

安装 systemd 和 init 模块,这样可以使容器具备基本的服务管理功能(宝塔面板依赖 systemd 来管理服务的启动和停止)。

apt-get update && apt-get install -y --reinstall systemd init

这条命令会安装 systemd 和 init,使容器能够运行完整的服务管理系统。

3.提交容器为新的镜像

由于修改了容器的系统配置,先退出容器,再将其保存为新的镜像,以便后续使用:

docker stop ubuntu

docker commit ubuntu my-ubuntu-image

该命令会将当前的 ubuntu 容器保存为名为 my-ubuntu-image 的新镜像,用于后续的宝塔面板安装。

二、启动带 systemd 支持的容器并配置端口映射

为了让新的镜像支持服务的启动和停止(如宝塔和 supervisord 服务),在启动时要将 /usr/sbin/init 设为容器启动的命令。同时映射常用的端口,以便 Mac 和容器之间互通。

1.创建volume

docker volume create ubuntu

Snipaste_2026-01-12_14-33-57.png

2.删除原容器 & 运行新镜像

删除原来的ubuntu容器

docker remove ubuntu

使用新的镜像创建并运行容器,并加入端口映射和挂载目录,如下所示:

docker run -d \

-p 8888:8888 -p 888:888 -p 80:80 -p 443:443 -p 20:20 -p 21:21 -p 3306:3306 -p 3322:22 -p 6379:6379 -p 9501:9501 \

--privileged=true \

--restart always \

-v ubuntu:/www -v /Users/echo/www:/www/wwwroot \

--name ubuntu \

my-ubuntu-image /usr/sbin/init

3.启动并测试 systemd

启动容器

docker start ubuntu

进入ubuntu控制台

docker exec -it ubuntu /bin/bash

可以测试 systemd 是否正常工作:

systemctl status

如果 systemctl 正常工作,说明服务管理功能已成功配置。

三、在 Ubuntu 容器中安装宝塔面板

接下来,在容器中安装宝塔面板:

1.下载并安装宝塔面板

使用官方安装脚本来安装宝塔面板。首先进入容器:

docker exec -it ubuntu /bin/bash

然后下载并运行宝塔安装脚本:

wget -O install.sh https://download.bt.cn/install/install_lts.sh && sudo bash install.sh ed8484bec

安装完成后,宝塔会生成访问地址和初始账户信息 (登录账户和密码记得保管)。

2.修改宝塔登录默认端口为8888

安装完成后可以修改宝塔登录端口为 8888

容器中输入bt 回车 -> 8 回车 -> 8888 回车

Snipaste_2026-01-12_14-34-16.png

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容器并使用浏览器访问宝塔面板

docker stop ubuntu

启动ubuntu容器并使用浏览器访问宝塔面板

docker start ubuntu

4.SSH 连接配置

Docker ubuntu:22.04 镜像默认不会安装ssh服务,所以需要手动安装ssh服务并启动,不然宝塔面板中的终端功能将不可用

安装SSH服务

sudo apt update

sudo apt install openssh-server

启动ssh服务

systemctl restart ssh

查看宝塔面板中的终端功能是否可用:

Snipaste_2026-01-12_14-34-52.png

5.Mysql 配置

安装完Mysql服务后默认不会对外开放root用户的链接权限,需要手动设置,下面是配置mysql的root用户对外连接权限

终端中使用root用户登录mysql:

mysql -u root -p

Mysql的root默认密码查看可以在宝塔面板 -> 数据库 -> root密码 中找到

Snipaste_2026-01-12_14-35-11.png

创建对外连接权限的root用户并给到最高权限:

#创建对外连接权限的root用户

CREATE USER 'root'@'%' IDENTIFIED BY '1234qwer';

#给root用户开放权限

GRANT ALL PRIVILEGES ON . TO 'root'@'%' WITH GRANT OPTION;

#刷新权限

FLUSH PRIVILEGES;

开放外部地址可以访问mysql服务:

在mysql的[mysqld]配置下添加bind-address = 0.0.0.0

Snipaste_2026-01-12_14-35-30.png

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

Snipaste_2026-01-12_14-35-51.png

6.Redis的配置

开放外部地址访问redis权限:

把Redis配置中的 bind 127.0.0.1 改为 bind 0.0.0.0

Snipaste_2026-01-12_14-39-40.png

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

Snipaste_2026-01-12_14-39-55.png

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

Snipaste_2026-01-12_14-40-12.png

五、常见问题及解决方案

宝塔安装的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镜像,下面是找到的一个镜像,但是本人没有尝试:

https://hub.docker.com/r/jrei/systemd-ubuntu

宝塔Redis无法启动/启动失败

查看Redis 日志后发现了 设置 Locale 警告,如果出现 locale 错误提示,日志错误如下:

Failed to configure LOCALE for invalid locale name.

13368:C * Configuration loaded

13368:M # Failed to configure LOCALE for invalid locale name.

这个错误通常是因为 Redis 尝试配置 Locale 时未找到有效的 Locale 设置。可以通过以下方式解决:

apt-get update

apt-get install -y locales

locale-gen en_US.UTF-8

update-locale LANG=en_US.UTF-8

export LANG=en_US.UTF-8

然后在宝塔面板重启redis服务即可

评论