Featured image of post 宝塔与 1Panel:两款 Linux 服务器管理面板的 Docker 部署实战

宝塔与 1Panel:两款 Linux 服务器管理面板的 Docker 部署实战

宝塔面板、1Panel 的 docker run 启动、目录挂载、默认凭据与排错——把 Web 化的 Linux 运维面板一次性收齐

Linux 服务器的"装系统、装环境、装服务"过去全靠命令行——装一个 Nginx 要写一长串 apt / yum 指令,配置 SSL 还要碰 openssl 的细节,对刚入门的人来说门槛不低。“服务器管理面板"就是为了把这套流程做成 Web 化、可视化的产品:宝塔、1Panel、AppNode、URLOS、aaPanel 都是这一脉的代表。这篇文章聚焦两款最常见的产品——宝塔(pch18/baota)moelin/1Panel——把它们的 Docker 部署、目录映射、默认凭据和排错一次性说清楚。

阅读对象:刚接触 Linux、想把日常运维(站点、数据库、SSL、计划任务)从命令行解放出来的同学;以及需要在容器里跑管理面板的 CI/CD / 演示环境搭建者。 覆盖范围:宝塔(CentOS/Debian 一键脚本 + pch18/baota 镜像)的安装与目录映射;1Panel 的 docker run / docker-compose 启动、目录约定、默认账户与首次进入。

一、为什么需要"服务器管理面板”

痛点命令行解法面板解法
装 Nginx/PHP/MySQL/Redis 一套 LNMP多个 apt install + 手动改配置选 LNP/MPN 模板,一键安装
给站点申请/部署 SSL 证书手写 acme.sh cron + nginx 站点配置域名 → 申请 → 自动续期
看磁盘/CPU/网络df -h / top / vmstat 拼图仪表盘一屏看完
多用户/多站点权限隔离nginx vhost + sudo 配置图形化"网站 → 权限"
容器化部署docker run / docker compose“应用商店” 里点一下

When to use:单台/几台机器、想快速搞起一套 Web 环境、不想折腾配置时;或团队需要让非运维同学也能上手时。Kubernetes 集群级别仍然不靠面板,而是 Helm + GitOps。


二、宝塔面板(pch18/baota)

宝塔是国产老牌面板,最早(2014 年)发布的是一键安装脚本,覆盖 CentOS/Debian/Ubuntu。后来社区出了 pch18/baota 镜像,让它可以跑在 Docker 里——非常适合演示、CI、临时环境。

2.1 原生安装(一键脚本)

1
2
3
4
5
# CentOS
yum install -y wget && wget -O install.sh https://download.bt.cn/install/install_6.0.sh && sh install.sh ed8484bec

# Debian / Ubuntu
wget -O install.sh https://download.bt.cn/install/install-ubuntu_6.0.sh && sudo bash install.sh ed8484bec

安装完后会输出管理地址(通常是 http://<IP>:8888/<随机入口>)和默认账号。

2.2 Docker 部署 pch18/baota

核心思路:把 /www 目录从容器里拷出来挂到宿主机,这样重启/升级容器不会丢数据。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
# 第一次启动(host 网络,端口全开)
docker run -tid --name baota --restart always \
  -p 8002:80 -p 8043:443 -p 8808:8888 -p 808:888 \
  --privileged=true \
  --shm-size=1g \
  pch18/baota:latest

# 把容器里的 /www 拷出来
docker cp baota:/www /home/docker/baota

# 关掉临时容器
docker rm -f baota

接下来用持久化的方式重新启动(推荐):

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
mkdir -p /home/docker/baota/www/wwwroot

# host 网络(推荐:避免端口转发的性能损失)
docker run -tid --name baota --restart always \
  --net=host \
  --privileged=true \
  --shm-size=1g \
  -v /home/docker/baota/www:/www \
  -v /home/docker/baota/www/wwwroot:/www/wwwroot \
  pch18/baota:latest

# bridge 网络(如需端口隔离)
docker run -tid --name baota --restart always \
  -p 8002:80 -p 8043:443 -p 8808:8888 -p 808:888 \
  --privileged=true \
  --shm-size=1g \
  -v /home/docker/baota/www:/www \
  -v /home/docker/baota/www/wwwroot:/www/wwwroot \
  pch18/baota:latest

端口说明80:80(HTTP)、443:443(HTTPS)、8888:8888(面板)、888(phpMyAdmin)。--shm-size=1g 给 PHP 足够的共享内存,--privileged=true 让面板能在容器里调 systemd / mount 等特权操作。

访问入口

1
http://<宿主机IP>:8808/login

默认账号 username/password 会在控制台输出,登录后必须改密码。

2.3 进入容器操作

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
docker logs -f --tail=100 baota
docker exec -it baota bash

# 容器内的命令行
[root@<container> wwwroot]# bt
===============宝塔面板命令行==================
(1)  重启面板服务        (8)  改面板端口
(2)  停止面板服务        (9)  清除面板缓存
(3)  启动面板服务        (10) 清除登录限制
(4)  重载面板服务        (11) 取消入口限制
(5)  修改面板密码        (12) 取消域名绑定限制
(6)  修改面板用户名      (13) 取消IP访问限制
(7)  强制修改MySQL密码   (14) 查看面板默认信息
(22) 显示面板错误日志    (15) 清理系统垃圾
(23) 关闭BasicAuth认证   (16) 修复面板
(24) 关闭谷歌认证        (17) 设置日志切割是否压缩
(25) 设置是否保存文件历史副本 (18) 设置是否自动备份面板
(0)  取消

2.4 常见问题

Q1:lsattr: Operation not supported While reading flags on python

容器化宝塔有时会触发这个错误(共享卷的属性查询在内核层不支持)。解决:

1
2
rm -rf /www/server/panel/pyenv
curl http://download.bt.cn/install/update_panel.sh | bash

Q2:Error: BT-Panel service startup failed.

通常是端口被占用或权限问题。重新跑一次安装脚本即可。


三、1Panel(moelin/1Panel)

1Panel 是 2022 年开源的新一代面板(飞致云出品),定位"现代化、开源、安全",界面更现代,自带"应用商店"。Docker 化的 moelin/1Panel 镜像让体验完整保留。

3.1 docker run 启动

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
docker run -d \
    --name 1panel \
    --restart always \
    -p 10087:10086 \
    -v /var/run/docker.sock:/var/run/docker.sock \
    -v /var/lib/docker/volumes:/var/lib/docker/volumes \
    -v /opt:/opt \
    -v /root:/root \
    -v /data:/data \
    -e TZ=Asia/Shanghai \
    moelin/1panel:latest

3.2 docker-compose 启动

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
version: "3"
services:
  1panel:
    container_name: 1panel
    restart: always
    network_mode: "host"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - /var/lib/docker/volumes:/var/lib/docker/volumes
      - /opt:/opt
      - /root:/root
    environment:
      - TZ=Asia/Shanghai
    image: moelin/1panel:latest
    labels:
      createdBy: "Apps"

3.3 首次进入

1
2
3
4
5
6
docker exec -it 1panel bash
root@<host>:/$ 1pctl user-info
面板地址: http://$LOCAL_IP:10086/entrance
面板用户:  1panel
面板密码:  <随机生成>
提示:修改密码可执行命令:1pctl update password

访问 http://<宿主机IP>:10086/entrance(不是 10087,是容器内 10086 端口暴露给宿主的入口)。

3.4 关键约定

备注
默认端口10086通过 -p 10087:10086 映射
默认账号1panel
默认密码1panel_password第一次安装随机生成
默认入口entrance即 URL 末尾的 entrance

3.5 注意事项

  • 容器化部署的 1Panel 升级:不要点 UI 里的"立即更新",应该拉新镜像 → 删除旧容器 → 用同样的目录映射重新部署。容器内 systemd 不完整,UI 升级路径会卡住。
  • 不可调整的挂载/var/run/docker.sock(必须挂,否则 1Panel 不能管理宿主机上的容器)。
  • 可调整的挂载/opt(应用数据)、/root(可选)、/var/lib/docker/volumes(Docker 卷)、TZ=Asia/Shanghai(时区)。
  • systemd 限制:因为容器内 systemd 不完整,部分面板功能(开机自启、服务守护)可能表现异常,复杂场景仍建议在裸机上跑 1Panel。

四、宝塔 vs 1Panel:怎么选

维度宝塔1Panel
起源2014 国产老牌2022 飞致云开源
资源占用较低(约 200MB)较高(Go 后端 + 前端)
Docker 支持较弱(“Docker 容器"模块粗糙)原生设计(“应用商店"直接装 WordPress / Halo / Halo 2)
应用商店第三方脚本合集内置官方市场(MySQL、Redis、Nginx、PHP 一键装)
主机防火墙无图形化(要装 iptables 插件)内置
Web 终端宝塔 SSH 终端内置
HTTPS 证书一键申请 + 自动续期一键申请 + 自动续期
备份面板级 + 站点级面板级 + 计划任务 cron
适合老项目、LAMP/LNMP 站群、内存小的机器新项目、容器化部署、想要现代 UI

经验法则

  • 内存 ≥ 4GB + 想"装 WordPress / 各类应用” → 1Panel
  • 内存 ≤ 2GB + 老项目维护 + 习惯原生命令 → 宝塔
  • 临时演示 / CI 环境 → pch18/baota 镜像(不用装扩展)

五、扩展阅读

使用 Hugo 构建
主题 StackJimmy 设计