宝塔面板 Docker 管理器部署容器的标准路径是「先在软件商店安装 Docker 管理器插件 → 拉取镜像 → 在『容器』页创建容器并映射端口和目录 → 在创建时把重启策略选为 always 或 unless-stopped」;再配合 systemctl enable docker 让 Docker 服务本身开机启动,容器才能真正做到服务器重启后自动拉起。
宝塔面板 Docker 管理器怎么部署一个容器?
结论:在宝塔里部署容器只有 5 步,全程在图形界面完成,不需要手写 docker run。
- 安装 Docker 管理器:宝塔面板 → 软件商店 → 搜索「Docker」→ 安装 Docker 管理器插件。插件会自动装好 docker-ce 和 docker-compose,安装完成后左侧菜单出现「Docker」入口。
- 配置镜像加速:进入 Docker → 设置 → 镜像加速,填入加速地址后保存。国内服务器不配加速,拉取
nginx:latest 这类镜像经常卡住或超时。
- 拉取镜像:Docker → 镜像管理 → 拉取镜像,镜像名写完整,例如
nginx:1.25、mysql:8.0、redis:7-alpine。建议指定版本号而不是 latest,否则下次重建容器可能拉到不兼容的新版本。
- 创建容器:Docker → 容器 → 创建容器。必填项有四个:容器名称(自定义,建议和用途对应,如
blog-nginx)、选择镜像、端口映射(宿主机端口:容器端口,例如 8080:80)、目录映射(宿主机路径:容器内路径,例如 /www/wwwroot/site:/usr/share/nginx/html)。需要数据库密码、时区之类的再补环境变量,如 TZ=Asia/Shanghai。
- 放行端口:如果容器映射的宿主机端口不在宝塔「安全」页已放行的范围内,需要手动放行,否则外部访问不到。
容器怎么设置开机自启?
结论:开机自启分两层——容器层用重启策略,宿主机层用 systemctl enable docker,两层都做才可靠。
容器层最直接的做法是在创建容器时,把「重启策略」下拉框选成 always,等价于命令行 --restart=always。宝塔提供四个选项,对应关系如下:
no:不自启,默认值,重启服务器后容器保持停止状态
always:Docker 服务启动就拉起容器,容器异常退出也会被重启
unless-stopped:与 always 类似,但你手动 stop 过的容器重启后不会被拉起,更适合调试期
on-failure:仅非 0 退出码时重启,可加次数限制
容器已经建好、当时忘了勾选自启,不用删了重建,直接在宝塔 Docker → 容器列表点「设置」改重启策略,或者在 SSH 里执行:
docker update --restart=always 容器名
宿主机层则执行:
systemctl enable docker
systemctl is-enabled docker # 返回 enabled 才算成功
原因很直白:容器的自启由 Docker 守护进程负责,如果 docker.service 本身没设成开机启动,服务器重启后 Docker 起不来,容器重启策略再怎么写也不会生效。
怎么验证开机自启真的生效了?
结论:不要靠「感觉」,用一条命令查实际的重启策略值最靠谱。
在 SSH 执行:
docker inspect -f '{{.HostConfig.RestartPolicy.Name}}' 容器名
返回 always 或 unless-stopped 说明配置已写入。接着做一次真实验证:reboot 重启服务器,等宝塔面板恢复后执行 docker ps,看容器 STATUS 是否是 Up。想更稳妥,可以在宝塔 Docker 的容器列表里看容器状态,再配合 docker logs -f 容器名 看启动日志有没有报错。
容器部署后马上又退出、端口访问不了怎么办?
结论:这两类问题 90% 出在端口占用和目录权限上,先查这两项。
容器启动即退出:先看日志 docker logs --tail 100 容器名。常见原因是启动命令写错、环境变量缺失(如 MySQL 不传 MYSQL_ROOT_PASSWORD 会直接退出)、挂载的宿主机目录权限不足导致容器内进程无法写入。目录映射前先在宝塔文件管理里确认宿主机路径存在且有写权限。
端口被占用:创建前用 ss -tlnp | grep 8080 确认宿主机端口没被 Nginx、MySQL 等占用。宝塔自带的 Nginx 默认占 80、443,MySQL 占 3306,映射时避开这些端口,或者先停掉对应服务。
多容器项目用 Compose 模板怎么保证自启?
结论:用 Docker 管理器的 Compose 模板部署多容器项目,只要每个 service 都写 restart: always,效果和单个容器一致。
在 Docker → Compose 模板里粘贴编排文件,每个 service 下加一行:
services:
web:
image: nginx:1.25
restart: always
ports:
- "8080:80"
模板部署出的容器同样出现在容器列表里,可以单独查看状态和日志。注意 Compose 项目的容器名称会带项目前缀,用 docker update 时按 docker ps 显示的实际名称来写。
整套流程的要点可以压缩成三句话:镜像锁定版本号,容器创建时把端口和目录映射写清楚,重启策略选 always 并确认 docker.service 已 enabled。遇到插件装不上、镜像拉取超时、容器反复重启这类具体问题,把 docker logs 的报错贴到 GJ 站长论坛(www.gj0.com)的问答版块,比对着界面瞎试效率高得多。