如何使用Docker容器部署Moodle教学系统并配置数据库

夏磊同学_3798

夏磊同学_3798

2026-05-18

1113人浏览

原创

docker部署moodle核心是拆分web、php、数据库和存储四服务并用docker-compose编排;需用mariadb:10.6、moodlehq/moodle-php-apache:8.1等镜像,挂载命名卷持久化,设moodle_docker_skip_init=1手动浏览器安装。

如何使用docker容器部署moodle教学系统并配置数据库

用 Docker 部署 Moodle 教学系统,核心是把 Web、PHP、数据库和数据存储四部分合理拆开,各自容器化运行,并通过 docker-compose.yml 统一编排。不推荐直接用单体镜像(如 bitnami/moodle),因为灵活性差、升级难、配置黑盒。下面按实际部署逻辑分步说明。

准备基础服务容器

Moodle 运行依赖四个关键组件,需分别拉取对应镜像并确认兼容性:

  • 数据库:推荐 mariadb:10.6(稳定、轻量、与 Moodle 兼容性好)。避免用 MySQL 8.0+ 的默认认证插件,否则 PHP 可能连不上;设 MYSQL_USER 和 MYSQL_PASSWORD 为专用 moodle 用户,别用 root 直连应用。
  • PHP + Web:官方维护的 moodlehq/moodle-php-apache:8.1 是首选,已预装 gd、zip、mbstring、opcache、intl 等必需扩展;若需 Nginx,就只用它做反向代理,PHP 层仍由该镜像提供 Apache + PHP-FPM。
  • 静态资源处理(可选但推荐):加一层 nginx:alpine 容器,负责 HTTPS 终止、压缩、缓存和静态文件(CSS/JS/图片)直出,减轻 PHP 层压力。
  • 持久化存储:必须为三处路径单独挂载命名卷:/var/www/html(Moodle 代码)、/var/www/moodledata(用户上传、缓存、日志等运行时数据)、/var/lib/mysql(数据库文件)。

编写 docker-compose.yml 编排文件

这是部署成败的关键。以下是最小可行配置(已去除非必要字段,保留核心逻辑):

version: '3.8'
services:
  db:
    image: mariadb:10.6
    restart: unless-stopped
    environment:
      MYSQL_ROOT_PASSWORD: rootpass
      MYSQL_DATABASE: moodle
      MYSQL_USER: moodleuser
      MYSQL_PASSWORD: moodlepass
    volumes:
      - moodle_db:/var/lib/mysql
    command: --max-allowed-packet=64M
<p>php:
image: moodlehq/moodle-php-apache:8.1
restart: unless-stopped
depends_on: [db]
volumes:</p>
  • moodle_code:/var/www/html
  • moodle_data:/var/www/moodledata
  • ./php.ini:/usr/local/etc/php/php.ini:ro environment: MOODLE_DB_TYPE: mysqli MOODLE_DB_HOST: db MOODLE_DB_NAME: moodle MOODLE_DB_USER: moodleuser MOODLE_DB_PASS: moodlepass MOODLE_WWWROOT: https://www.php.cn/link/bb122c8fe6c764e8aae555e2186a6344 MOODLE_DOCKER_SKIP_INIT: "1" # 关键:跳过自动安装,进浏览器手动走流程

web: image: nginx:alpine restart: unless-stopped ports: ["80:80", "443:443"] volumes:

  • moodle_code:/var/www/html:ro
  • moodle_data:/var/www/moodledata:ro
  • ./nginx.conf:/etc/nginx/nginx.conf:ro depends_on: [php]

volumes: moodle_code: moodle_data: moodle_db:

注意:MOODLE_WWWROOT 要填你最终访问的域名或 IP(如 https://moodle.example.com),不能写 localhost——除非你只在本机测试且没配 hosts。

启动并完成浏览器安装

执行命令启动全部服务:

Docker Cli
Docker Cli

使用 Docker CLI 构建、运行、停止、检查和管理容器与镜像的助手。用于执行容器相关任务。

下载
docker-compose up -d

等 20–30 秒后,用 docker-compose logs php 查看 PHP 容器日志,确认无数据库连接错误;再用浏览器打开 https://www.php.cn/link/bb122c8fe6c764e8aae555e2186a6344(或你设的 MOODLE_WWWROOT 地址),会进入标准 Moodle 安装向导。此时:

  • 数据库类型选 mysqli,主机填 db(即 compose 中的服务名),端口默认 3306;
  • 数据库名、用户名、密码严格对应 db 服务里设的值;
  • moodledata 路径填 /var/www/moodledata(容器内路径,不是宿主机路径);
  • 管理员账号密码按提示设置,后续可通过后台修改。

安装成功后,所有数据都落在命名卷中,删容器不丢数据;下次 docker-compose up -d 即可恢复完整环境。

常见问题快速定位

如果打不开页面或报错,优先检查这三项:

  • 执行 docker-compose ps 看所有容器状态是否为 Up;若某容器是 Exit,立刻用 docker-compose logs <service></service> 查日志;
  • 确认 php 容器能否连通 db:进容器执行 nc -zv db 3306,不通说明网络或数据库未就绪;
  • 检查 web 容器的 nginx.conf 是否正确定义了 fastcgi_pass php:8000(若用 Apache 则是 proxy_pass http://php)。

不复杂但容易忽略

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

docker

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
k8s和docker区别
k8s和docker区别

k8s和docker区别有抽象层次不同、管理范围不同、功能不同、应用程序生命周期管理不同、缩放能力不同、高可用性等等区别。本专题为大家提供k8s和docker区别相关的各种文章、以及下载和课程。

2023.07.24

665

4

docker进入容器的方法有哪些
docker进入容器的方法有哪些

docker进入容器的方法:1. Docker exec;2. Docker attach;3. Docker run --interactive --tty;4. Docker ps -a;5. 使用 Docker Compose。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.08

4719

6

docker容器无法访问外部网络怎么办
docker容器无法访问外部网络怎么办

docker 容器无法访问外部网络的原因和解决方法:配置 nat 端口映射以将容器端口映射到主机端口。根据主机兼容性选择正确的网络驱动(如 host 或 overlay)。允许容器端口通过主机的防火墙。配置容器的正确 dns 服务器。选择正确的容器网络模式。排除主机网络问题,如防火墙或连接问题。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.08

5637

6

docker镜像有什么用
docker镜像有什么用

docker 镜像是预构建的软件组件,用途广泛,包括:应用程序部署:简化部署,提高移植性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.08

2113

7

Docker容器化部署与DevOps实践
Docker容器化部署与DevOps实践

本专题面向后端与运维开发者,系统讲解 Docker 容器化技术在实际项目中的应用。内容涵盖 Docker 镜像构建、容器运行机制、Docker Compose 多服务编排,以及在 DevOps 流程中的持续集成与持续部署实践。通过真实场景演示,帮助开发者实现应用的快速部署、环境一致性与运维自动化。

2026.02.11

219

16

Docker 容器部署
Docker 容器部署

本专题整合了Docker容器部署相关内容,阅读专题下面的文章了解更多详细操作教程。

2026.03.31

411

14

Java容器化部署与Docker实践教程合集
Java容器化部署与Docker实践教程合集

聚焦 Java 应用的容器化与云原生部署,讲解 Dockerfile 编写规范与 Java 应用镜像构建、多阶段构建(Multi-stage Build)减小镜像体积、Jib / Buildpacks 免 Dockerfile 镜像构建方案、JVM 容器感知参数(-XX:MaxRAMPercentage)配置、Docker Compose 编排多服务(应用 + MySQL + Redis)、容器健康检查与资源限制、Kubernetes

2026.05.11

380

26

Go Docker与容器化部署教程合集
Go Docker与容器化部署教程合集

聚焦 Go 应用的容器化部署优势与实践,讲解 Go 静态编译特性(CGO_ENABLED=0)与 scratch / distroless 极小基础镜像构建、多阶段 Dockerfile 编写规范、交叉编译生成目标平台二进制、镜像安全扫描(Trivy)与漏洞修复、Docker Compose 本地编排开发环境、Kubernetes Deployment / Service / ConfigMap 部署 Go 服务、健康检查(Livene

2026.05.15

285

24

Hyperf 项目部署运维与性能调优手册
Hyperf 项目部署运维与性能调优手册

聚焦 Hyperf 在生产环境的落地,包含 Docker 高效打包、Swoole 配置优化、常见的内存溢出(OOM)问题排查方法以及热更新方案。

2026.05.19

385

15

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
phpMyAdmin 安装文档
phpMyAdmin 安装文档

共0课时 | 0人学习

Docker 官方文档
Docker 官方文档

共0课时 | 0人学习

宝塔 Docker 模块使用手册
宝塔 Docker 模块使用手册

共0课时 | 0人学习