erseco/alpine-moodle。
仓库地址:[***]
docker compose.ymldocker logs -f <容器名>查看)MOODLE_USERNAME和MOODLE_PASSWORD覆盖为安全值。/public目录提供文件服务。publicpaths.php应用兼容性补丁,以支持容器内的端口映射。Moodle 5.1引入了新的/public目录用于所有Web可访问文件。如果从5.0或更早版本升级:
config.phpmoodledata/目录/var/www/html/下的所有剩余文件,避免陈旧或冲突代码。config.php和自定义插件/主题复制到新代码库。/public目录时,容器会自动执行composer install。从Docker Hub获取:
bashdocker compose up
使用环境变量定义的凭据登录。
从GHCR获取:
yamlservices: moodle: image: ghcr.io/erseco/alpine-moodle # 其余配置...
在某些情况下,可能需要在Moodle容器内以root用户运行命令(例如安装额外包),可使用docker compose exec命令并指定--user root选项:
bashdocker compose exec --user root moodle sh
在docker compose.yml文件中定义环境变量
| 变量名 | 默认值 | 描述 |
|---|---|---|
| LANG | en_US.UTF-8 | 语言设置 |
| LANGUAGE | en_US:en | 语言偏好 |
| SITE_URL | http://localhost | 设置公共站点URL |
| REVERSEPROXY | false | 详见反向代理配置 |
| SSLPROXY | false | 详见反向代理配置 |
| REDIS_HOST | Redis实例主机名,例如redis | |
| DB_TYPE | pgsql | 数据库类型:mysqli、pgsql、mariadb |
| DB_HOST | postgres | 数据库主机,例如db容器名 |
| DB_PORT | 5432 | 数据库端口:Postgres=5432,MySQL=3306 |
| DB_NAME | moodle | 数据库名 |
| DB_USER | moodle | 数据库用户名 |
| DB_FETCHBUFFERSIZE | 若使用PgBouncer等PostgreSQL连接池(事务模式),设置为0 | |
| DB_DBHANDLEOPTIONS | false | 若使用不支持发送选项的PostgreSQL连接池(如PgBouncer),设置为true |
| DB_HOST_REPLICA | 只读副本数据库主机名 | |
| DB_PORT_REPLICA | 副本数据库端口,留空则与DB_PORT相同 | |
| DB_USER_REPLICA | 副本数据库用户名,留空则与DB_USER相同 | |
| DB_PASS_REPLICA | 副本数据库密码,留空则与DB_PASS相同 | |
| DB_PREFIX | mdl_ | 数据库前缀。警告:不要使用数值,否则Moodle无法启动 |
| MY_CERTIFICATES | none | 经过base64编码的可信LDAP证书或证书链 |
| MOODLE_EMAIL | *** | Moodle管理员*** |
| MOODLE_LANGUAGE | en | Moodle界面语言 |
| MOODLE_SITENAME | New-Site | 站点名称 |
| MOODLE_USERNAME | moodleuser | 管理员用户名 |
| MOODLE_PASSWORD | PLEASE_CHANGEME | 管理员密码 |
| SMTP_HOST | smtp.gmail.com | SMTP服务器主机 |
| SMTP_PORT | 587 | SMTP服务器端口 |
| SMTP_USER | *** | SMTP用户名 |
| SMTP_PASSWORD | your_password | SMTP密码 |
| SMTP_PROTOCOL | tls | SMTP协议 |
| MOODLE_MAIL_NOREPLY_ADDRESS | noreply@localhost | noreply***地址 |
| MOODLE_MAIL_PREFIX | [moodle] | 邮件前缀 |
| AUTO_UPDATE_MOODLE | true | 设置为false可禁用Docker启动时执行Moodle更新(如插件) |
| DEBUG | false | 调试模式开关 |
| client_max_body_size | 50M | Nginx客户端最大请求体大小 |
| post_max_size | 50M | PHP POST数据最大大小 |
| upload_max_filesize | 50M | PHP上传文件最大大小 |
| max_input_vars | 5000 | PHP最大输入变量数 |
| PRE_CONFIGURE_COMMANDS | 配置开始前运行的命令 | |
| POST_CONFIGURE_COMMANDS | 配置完成后运行的命令 | |
| RUN_CRON_TASKS | true | 设置为false可禁用自动运行Moodle Cron任务 |
当使用反向代理(如Caddy、Traefik、nginx-proxy-manager)处理SSL终止时,可能会遇到CSS丢失或“重定向过多”错误。这是常见问题,可通过正确配置解决。
CSS丢失:若SITE_URL设为内部Docker IP(如[***]),Moodle会生成带内部地址的URL。当浏览器通过[***]访问时,会因混合内容(尝试加载http内容到https页面)阻止这些资源。
ERR_TOO_MANY_REDIRECTS:若SITE_URL设为公共HTTPS地址(如[***])但未正确配置代理设置,Moodle可能会混淆协议并进入重定向循环。
关键是告知Moodle其位于SSL终止代理之后。可通过以下环境变量设置解决:
SITE_URL:设为公共外部URL,带https协议(如[***])。REVERSEPROXY:大多数反向代理设置保持false。仅当Moodle有意通过多个不同基础URL访问(如用户使用不同域名或协议)时设为true。在典型反向代理场景(所有用户通过单一公共URL访问)中保持false。详见Moodle反向代理文档。SSLPROXY:设为true。告知Moodle信任代理发送的X-Forwarded-Proto头,理解连接是安全的(即使与Docker容器的内部连接为HTTP)。以下是docker-compose.yml和Caddyfile的反向代理配置示例。
docker-compose.yml
yamlservices: moodle: image: erseco/alpine-moodle restart: unless-stopped environment: SITE_URL: [***] REVERSEPROXY: "false" SSLPROXY: "true" # ... 其他环境变量 volumes: - moodledata:/var/www/moodledata - moodlehtml:/var/www/html depends_on: - postgres # ... 其他服务(postgres等) volumes: moodledata: moodlehtml:
Caddyfile
caddymoodle.example.com { reverse_proxy moodle:8080 { header_up Host {host} header_up X-Forwarded-Proto {scheme} header_up X-Forwarded-For {remote} } }
通过此配置可避免Moodle在反向代理后的常见问题。详见issue #101。
yaml--- services: postgres: image: postgres:alpine restart: unless-stopped environment: - POSTGRES_PASSWORD=moodle - POSTGRES_USER=moodle - POSTGRES_DB=moodle volumes: - postgres:/var/lib/postgresql/data moodle: image: erseco/alpine-moodle restart: unless-stopped environment: MOODLE_USERNAME: moodleuser MOODLE_PASSWORD: PLEASE_CHANGEME ports: - 80:8080 volumes: - moodledata:/var/www/moodledata - moodlehtml:/var/www/html depends_on: - postgres volumes: postgres: null moodledata: null moodlehtml: null
此镜像包含Moosh——强大的Moodle管理命令行工具。可通过以下命令调用任何Moosh命令:
bashdocker compose exec moodle moosh <命令>
示例:
bashdocker compose exec moodle moosh plugin-list
bashdocker compose exec moodle moosh plugin-install mod_attendance
可使用
--force选项强制安装不支持的插件。
注意:moosh存在首次安装 bug,建议使用
--delete标志重新调用安装函数或使用module-reinstall选项,例如:docker compose exec moodle moosh plugin-install --delete theme_almondb或docker compose exec moodle moosh module-reinstall theme_almondb
按ID备份课程。默认排除日志和成绩历史。
示例:备份ID=3的课程到容器内/opt/moosh/目录的默认.mbz文件:
bashdocker compose exec moodle moosh course-backup 3
创建新Moodle用户。提供一个或多个参数可创建多个用户。
示例:创建用户“testuser”并设置所有可选值
bashdocker compose exec moodle moosh user-create --password pass --email *** --digest 2 --city Valverde --country ES --institution "IES Garoé" --department "Technology" --firstname "first name" --lastname name testuser
从Moodle删除用户。提供一个或多个用户名为参数。
示例:删除用户testuser
bashdocker compose exec moodle moosh user-delete testuser
这些示例可直接包含在POST_CONFIGURE_COMMANDS中,以自动化插件安装、备份或任何Moosh支持的功能。
使用Moosh可遵循DRY原则(避免重复),并利用强大的Moodle管理工具集。
完整命令列表见:[***]
可通过PRE_CONFIGURE_COMMANDS和POST_CONFIGURE_COMMANDS环境变量定义在Moodle配置前后执行的命令。适用于安装额外包或运行脚本等任务。
yamlenvironment: PRE_CONFIGURE_COMMANDS: "cat config-dist.php" POST_CONFIGURE_COMMANDS: | moosh plugin-list moosh plugin-install --delete theme_almondb moosh plugin-install --delete theme_almondb
调用docker compose build会使用Moodle主分支的最新版本。如需使用特定版本,可通过MOODLE_VERSION构建参数指定。
要使用特定版本,编辑docker compose.yml中moodle服务的build部分:
yamlmoodle: image: erseco/alpine-moodle build: context: . args: MOODLE_VERSION: v4.5.3 # 替换为所需版本
可用版本标签列表见:[***]
Moodle在管理员 > 开发 > 创建测试场景下提供测试场景生成工具。要启用它,运行以下命令或添加到POST_CONFIGURE_COMMANDS:
bashphp admin/tool/generator/cli/runtestscenario.php
此工具允许使用.feature文件语法生成手动测试所需的所有元素。
安装额外Alpine包(以root用户):
bashdocker compose exec --user root moodle sh -c "apk update && apk add nano"
手动数据库升级:
bashdocker compose exec moodle php admin/cli/upgrade.php
访问日志:
bashdocker compose logs -f moodle
探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
在 Linux 系统配置镜像服务
在 Docker Desktop 配置镜像
Docker Compose 项目配置
Kubernetes 集群配置 Containerd
K3s 轻量级 Kubernetes 镜像加速
VS Code Dev Containers 配置
MacOS OrbStack 容器配置
在宝塔面板一键配置镜像
Synology 群晖 NAS 配置
飞牛 fnOS 系统配置镜像
极空间 NAS 系统配置服务
爱快 iKuai 路由系统配置
绿联 NAS 系统配置镜像
QNAP 威联通 NAS 配置
Podman 容器引擎配置
HPC 科学计算容器配置
ghcr、Quay、nvcr 等镜像仓库
无需登录使用专属域名
需要其他帮助?请查看我们的 常见问题Docker 镜像访问常见问题解答 或 提交工单
免费版仅支持 Docker Hub 访问,不承诺可用性和速度;专业版支持更多镜像源,保证可用性和稳定速度,提供优先客服响应。
专业版支持 docker.io、gcr.io、ghcr.io、registry.k8s.io、nvcr.io、quay.io、mcr.microsoft.com、docker.elastic.co 等;免费版仅支持 docker.io。
当返回 402 Payment Required 错误时,表示流量已耗尽,需要充值流量包以恢复服务。
通常由 Docker 版本过低导致,需要升级到 20.x 或更高版本以支持 V2 协议。
先检查 Docker 版本,版本过低则升级;版本正常则验证镜像信息是否正确。
使用 docker tag 命令为镜像打上新标签,去掉域名前缀,使镜像名称更简洁。
来自真实用户的反馈,见证轩辕镜像的优质服务