
!Docker Image Size !nginx 1.28 !php 8.4 !moodle-5.0 !License MIT
基于Alpine Linux构建的Docker Moodle环境,具备高可用性(HA)能力。
仓库:https://github.com/jimsihk/alpine-moodle
ARG_MOODLE_PLUGIN_LIST预安装Moodle插件ARG_MOODLE_GIT_URL和ARG_MOODLE_GIT_BRANCH,运行时通过MOODLE_GIT_URL和MOODLE_GIT_BRANCH)docker logs -f <容器名称>查看)
GitHub Action中的夜间构建会扫描变更,然后执行标记并在容器仓库发布新版本。
发布标签格式为:XXX.YYY.ZZ
version.php的变更编号例如:对于Moodle 4.1.1+分支_401_版本2022112801.06,发布标签将从401.106.0开始
镜像可在多个仓库获取:
alpine-moodle:XXX.YYY.ZZZ
alpine-moodle:XXX.YYY.ZZZ-slim
UPDATE_MOODLE_CODE)ARG_ENABLE_GIT_CLONE控制启动Docker容器:
docker compose up
启动Moodle集群:
./generate_ssl_cert.sh docker compose --file docker-compose.replica.yml up
使用提供的凭据(环境变量)登录系统
示例docker-compose文件
generate_ssl_cert.sh生成localhost的示例SSL证书在docker-compose.yml文件中定义环境变量
| 变量名称 | 默认值 | 描述 |
|---|---|---|
| LANG | en_US.UTF-8 | |
| LANGUAGE | en_US:en | |
| SITE_URL | http://localhost | 设置公共站点URL |
| SSLPROXY | false | 禁用SSL代理以避免站点循环(例如Cloudflare) |
| DB_TYPE | pgsql | 数据库类型:mysqli - pgsql - mariadb |
| DB_HOST | postgres | 数据库主机名(如数据库容器名称) |
| DB_PORT | 5432 | 数据库端口(PostgresSQL=5432 - MySQL/MariaDB=3306) |
| DB_NAME | moodle | 数据库名称 |
| DB_USER | moodle | 数据库登录用户名 |
| DB_PASS | moodle | 数据库登录密码 |
| DB_FETCHBUFFERSIZE | 使用PgBouncer等PostgresSQL连接池时(事务模式)设为0 | |
| DB_DBHANDLEOPTIONS | false | 使用不支持发送选项的PostgresSQL连接池(如PgBouncer)时设为true |
| DB_DBPERSIST | false | 设为true可保持数据库与Moodle PHP线程的连接,可能提升性能但可能耗尽数据库连接数 |
| DB_HOST_REPLICA | 只读副本数据库主机名 | |
| DB_PORT_REPLICA | 副本数据库端口,留空则与DB_PORT相同 | |
| DB_USER_REPLICA | 副本数据库登录用户名,留空则与DB_USER相同 | |
| DB_PASS_REPLICA | 副本数据库登录密码,留空则与DB_PASS相同 | |
| DB_PREFIX | mdl_ | 数据库前缀。警告:不要使用数值,否则Moodle无法启动 |
| MOODLE_EMAIL | *** | |
| MOODLE_LANGUAGE | en | |
| MOODLE_SITENAME | New-Site | |
| MOODLE_SHORTNAME | moodle | |
| MOODLE_USERNAME | moodleuser | |
| MOODLE_PASSWORD | PLEASE_CHANGEME | |
| SMTP_HOST | smtp.gmail.com | |
| SMTP_PORT | 587 | |
| SMTP_USER | *** | |
| SMTP_PASSWORD | your_password | |
| SMTP_PROTOCOL | tls | |
| MOODLE_MAIL_NOREPLY_ADDRESS | noreply@localhost | |
| MOODLE_MAIL_PREFIX | [moodle] | |
| memory_limit | 128M | PHP脚本允许分配的最大内存(默认值继承自基础镜像) |
| client_max_body_size | 50M | 客户端请求体的最大允许大小,在“Content-Length”请求头字段中指定 |
| post_max_size | 50M | 允许的POST数据最大大小。此设置也影响文件上传。要上传大文件,此值必须大于upload_max_filesize |
| upload_max_filesize | 50M | 上传文件的最大大小 |
| max_input_vars | 5000 | 每个请求允许的最大输入变量数,至少设为5000 |
| opcache_jit_buffer_size | 64M | 为编译的JIT代码保留的共享内存量,设为0可禁用JIT |
| opcache_jit | 1235 | 配置JIT模式(默认值继承自基础镜像) |
| opcache_memory_consumption | 128 | OPcache使用的共享内存存储大小(MB)(默认值继承自基础镜像) |
| SESSION_CACHE_TYPE | 可选设置共享会话缓存存储:memcached、redis、database(留空则保持不变) | |
| SESSION_CACHE_HOST | 外部缓存存储的主机名,memcached和redis需要 | |
| SESSION_CACHE_PORT | 缓存端口,memcached=***,Redis=6379,memcached和redis需要 | |
| SESSION_CACHE_PREFIX | mdl | 缓存前缀 |
| SESSION_CACHE_AUTH | 缓存存储的认证密钥,redis可能需要 | |
| AUTO_UPDATE_MOODLE | true | 设为false禁用容器启动时执行Moodle更新(如插件) |
| UPDATE_MOODLE_CODE | true | 设为false禁用自动下载Moodle核心代码最新补丁,仅在AUTO_UPDATE_MOODLE为true或构建时ARG_ENABLE_GIT_CLONE为true时有效 |
| DISABLE_WEB_INSTALL_PLUGIN | false | 设为true禁用通过站点管理UI安装插件,有助于避免HA设置下镜像不同步 |
| MAINT_STATUS_KEYWORD | Status: enabled | 运行admin/cli/maintenance.php时检测Moodle维护状态的关键字,语言遵循Moodle站点默认语言 |
| LOCAL_CACHE_DIRECTORY | 设置本地快速文件系统路径,用于Moodle本地缓存,无需与其他实例共享 | |
| SKIP_MOODLE_CONFIG | false | 设为true跳过Moodle配置脚本 |
更多PHP和NGINX设置可参考基础镜像https://github.com/jimsihk/alpine-php-nginx/blob/dev/README.md
AUTO_UPDATE_MOODLE和UPDATE_MOODLE_CODE的重要说明如果设为true,容器启动时执行更新会将Moodle设为CLI维护模式。此时任何用户(包括管理员)都无法使用Moodle。
如果部署Moodle容器集群以实现HA(如在Kubernetes上),建议将两者都设为false,以避免自动扩展(如添加额外容器)或容器重启(自动修复)时对用户造成意外中断。
ARG_MOODLE_PLUGIN_LIST:定义插件列表
ARG_MOODLE_PLUGIN_LIST:docker buildx build . -t my_moodle_image:my_tag \ --build-arg ARG_MOODLE_PLUGIN_LIST='mod_attendance mod_checklist mod_customcert block_checklist gradeexport_checklist'
仅构建以安装额外Moodle插件(较快),创建如下Dockerfile然后构建。
Dockerfile.plugins示例:
dockerfile# Dockerfile.plugins FROM quay.io/jimsihk/alpine-moodle:latest # 安装额外插件,空格/逗号分隔的参数(可选) # 使用install-plugin-list带参数"-f"强制安装不兼容当前Moodle版本的插件 ARG ARG_MOODLE_PLUGIN_LIST='' ENV MOODLE_PLUGIN_LIST=${ARG_MOODLE_PLUGIN_LIST} RUN if [ -n "${MOODLE_PLUGIN_LIST}" ]; then /usr/libexec/moodle/install-plugin-list -p "${MOODLE_PLUGIN_LIST}"; fi && \ rm -rf /tmp/moodle-plugins
dockerfile# Dockerfile.plugins FROM quay.io/jimsihk/alpine-moodle:latest # 安装额外插件,空格/逗号分隔的参数(可选) ARG ARG_MOODLE_PLUGIN_LIST='' ENV MOODLE_PLUGIN_LIST=${ARG_MOODLE_PLUGIN_LIST} RUN /usr/libexec/moodle/download-moodle-plugin
Dockerfile.plugins构建示例:# 构建 docker buildx build . -t my_moodle_image:my_tag \ -f Dockerfile.plugins \ --build-arg ARG_MOODLE_PLUGIN_LIST='mod_attendance,mod_checklist,mod_customcert,block_checklist,gradeexport_checklist'
ARG_ALLOW_INCOMPATIBLE_PLUGIN:允许安装不兼容插件
ARG_ALLOW_INCOMPATIBLE_PLUGIN可用,控制是否继续安装最新可用版本(尽管可能与当前Moodle版本不兼容),默认值为false:docker buildx build . -t my_moodle_image:my_tag \ --build-arg ARG_MOODLE_PLUGIN_LIST='mod_attendance mod_checklist mod_customcert block_checklist gradeexport_checklist' \ --build-arg ARG_ALLOW_INCOMPATIBLE_PLUGIN='true'
Dockerfile.plugins:dockerfile# Dockerfile.plugins FROM quay.io/jimsihk/alpine-moodle:latest ARG ARG_MOODLE_PLUGIN_LIST='mod_attendance mod_checklist mod_customcert block_checklist gradeexport_checklist' ARG ARG_ALLOW_INCOMPATIBLE_PLUGIN='true' ENV MOODLE_PLUGIN_LIST=${ARG_MOODLE_PLUGIN_LIST} ENV ALLOW_INCOMPATIBLE_PLUGIN=${ARG_ALLOW_INCOMPATIBLE_PLUGIN} RUN /usr/libexec/moodle/download-moodle-plugin
无法创建/更新Moodle角色,提示“角色简称不正确”(https://github.com/erseco/alpine-moodle/issues/26%EF%BC%89
role-update-capability命令,注意仅插件0.39版本包含此命令===FULL_DESC===# 基于Alpine Linux的高可用性Moodle
!Docker Image Size !nginx 1.28 !php 8.4 !moodle-5.0 !License MIT
基于Alpine Linux构建的Docker Moodle环境,具备高可用性(HA)能力。
仓库:https://github.com/jimsihk/alpine-moodle
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。


探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
无需登录使用专属域名
Kubernetes 集群配置 Containerd
K3s 轻量级 Kubernetes 镜像加速
VS Code Dev Containers 配置
Podman 容器引擎配置
HPC 科学计算容器配置
ghcr、Quay、nvcr 等镜像仓库
Harbor Proxy Repository 对接专属域名
Portainer Registries 加速拉取
Nexus3 Docker Proxy 内网缓存
需要其他帮助?请查看我们的 常见问题Docker 镜像访问常见问题解答 或 提交工单
docker search 限制
站内搜不到镜像
离线 save/load
插件要用 plugin install
WSL 拉取慢
安全与 digest
新手拉取配置
镜像合规机制
manifest unknown
no matching manifest(架构)
invalid tar header(解压)
TLS 证书失败
DNS 超时
域名连通性排查
410 Gone 排查
402 与流量用尽
401 认证失败
429 限流
D-Bus 凭证提示
413 与超大单层
来自真实用户的反馈,见证轩辕镜像的优质服务