ellakcy/moodle一个安装并运行最新稳定版Moodle的Docker镜像,支持外部MySQL、MariaDB或PostgreSQL数据库,具备自动安装功能并包含默认预定义管理员用户。所有镜像均可通过Docker Hub获取。
使用本仓库构建所需镜像较为繁琐,完整流程在CONTRIBUTING.md文件中有详细描述。
所有可用镜像列表见:[***]
每种镜像变体按数据库支持、版本以及基于Apache还是Alpine FPM进行区分。具体如下:
| 镜像命名模式 | PHP执行类型 | MySQL支持 | MariaDB支持 | PostgreSQL支持 |
|---|---|---|---|---|
mulitbase_apache_^VERSION^ | apache | 是 | 是 | 是 |
mysql_maria_apache_^VERSION^ | apache | 是 | 是 | 否 |
postgresql_apache_^VERSION^ | apache | 否 | 否 | 是 |
mulitbase_alpine_fpm_^VERSION^ | fpm(运行于Alpine Linux) | 是 | 是 | 是 |
mysql_maria_alpine_fpm_^VERSION^ | fpm(运行于Alpine Linux) | 是 | 是 | 否 |
postgresql_alpine_fpm_^VERSION^ | fpm(运行于Alpine Linux) | 否 | 否 | 是 |
mulitbase_fpm_^VERSION^ | fpm | 是 | 是 | 是 |
mysql_maria_fpm_^VERSION^ | fpm | 是 | 是 | 否 |
postgresql_fpm_^VERSION^ | fpm | 否 | 否 | 是 |
^VERSION^为2-3位数字,第一位对应主版本号,其余对应次版本号。例如,mulitbase_apache_39运行Moodle 3.9,mulitbase_apache_310运行Moodle 3.10。
针对最新Moodle版本,还提供以下镜像:
| 镜像 | PHP执行类型 | MySQL支持 | MariaDB支持 | PostgreSQL支持 |
|---|---|---|---|---|
latest | apache | 是 | 是 | 是 |
mulitbase_apache_latest | apache | 是 | 是 | 是 |
mysql_maria_apache_latest | apache | 是 | 是 | 否 |
postgresql_apache_latest | apache | 否 | 否 | 是 |
mulitbase_alpine_fpm_latest | fpm(运行于Alpine Linux) | 是 | 是 | 是 |
mysql_maria_alpine_fpm_latest | fpm(运行于Alpine Linux) | 是 | 是 | 否 |
postgresql_alpine_fpm_latest | fpm(运行于Alpine Linux) | 否 | 否 | 是 |
mulitbase_fpm_latest | fpm | 是 | 是 | 是 |
mysql_maria_fpm_latest | fpm | 是 | 是 | 否 |
postgresql_fpm_latest | fpm | 否 | 否 | 是 |
针对最新Moodle LTS版本,提供以下镜像:
| 镜像 | PHP执行类型 | MySQL支持 | MariaDB支持 | PostgreSQL支持 |
|---|---|---|---|---|
mulitbase_apache_lts | apache | 是 | 是 | 是 |
mysql_maria_apache_lts | apache | 是 | 是 | 否 |
postgresql_apache_lts | apache | 否 | 否 | 是 |
mulitbase_alpine_fpm_lts | fpm(运行于Alpine Linux) | 是 | 是 | 是 |
mysql_maria_alpine_fpm_lts | fpm(运行于Alpine Linux) | 是 | 是 | 否 |
postgresql_alpine_fpm_lts | fpm(运行于Alpine Linux) | 否 | 否 | 是 |
mulitbase_fpm_lts | fpm | 是 | 是 | 是 |
mysql_maria_fpm_lts | fpm | 是 | 是 | 否 |
postgresql_fpm_lts | fpm | 否 | 否 | 是 |
所有镜像均搭载PHP 7.4。
默认PHP版本为7.4,同时为Moodle 3.11、4.0和4.11版本提供PHP 8.0镜像:
| 镜像命名模式 | PHP执行类型 | MySQL支持 | MariaDB支持 | PostgreSQL支持 |
|---|---|---|---|---|
mulitbase_apache_php8.0_^VERSION^ | apache | 是 | 是 | 是 |
mysql_maria_apache_php8.0_^VERSION^ | apache | 是 | 是 | 否 |
postgresql_apache_php8.0_^VERSION^ | apache | 否 | 否 | 是 |
mulitbase_alpine_fpm_php8.0_^VERSION^ | fpm(运行于Alpine Linux) | 是 | 是 | 是 |
mysql_maria_alpine_fpm_php8.0_^VERSION^ | fpm(运行于Alpine Linux) | 是 | 是 | 否 |
postgresql_alpine_fpm_php8.0_^VERSION^ | fpm(运行于Alpine Linux) | 否 | 否 | 是 |
mulitbase_fpm_php8.0_^VERSION^ | fpm | 是 | 是 | 是 |
mysql_maria_fpm_php8.0_^VERSION^ | fpm | 是 | 是 | 否 |
postgresql_fpm_php8.0_^VERSION^ | fpm | 否 | 否 | 是 |
PHP 7.4镜像命名模式如下:
| 镜像命名模式 | PHP执行类型 | MySQL支持 | MariaDB支持 | PostgreSQL支持 |
|---|---|---|---|---|
mulitbase_apache_php7.4_^VERSION^ | apache | 是 | 是 | 是 |
mysql_maria_apache_php7.4_^VERSION^ | apache | 是 | 是 | 否 |
postgresql_apache_php7.4_^VERSION^ | apache | 否 | 否 | 是 |
mulitbase_alpine_fpm_php7.4_^VERSION^ | fpm(运行于Alpine Linux) | 是 | 是 | 是 |
mysql_maria_alpine_fpm_php7.4_^VERSION^ | fpm(运行于Alpine Linux) | 是 | 是 | 否 |
postgresql_alpine_fpm_php7.4_^VERSION^ | fpm(运行于Alpine Linux) | 否 | 否 | 是 |
mulitbase_fpm_php7.4_^VERSION^ | fpm | 是 | 是 | 是 |
mysql_maria_fpm_php7.4_^VERSION^ | fpm | 是 | 是 | 否 |
postgresql_fpm_php7.4_^VERSION^ | fpm | 否 | 否 | 是 |
镜像支持以下数据库版本:
Postgresql: 11或更早Mysql: 5.7Mariadb: 10.2我们旨在每周提供更新的镜像。每个构建镜像均以_YmdHi格式标记构建日期,无构建日期的为最新构建。例如,mysql_maria_apache_latest是最新构建镜像,mysql_maria_apache_latest_202108112012是2021-08-11 20:12构建的镜像。可在Docker Hub的标签部分查看最新或旧版本构建。
我们还开发了docker-compose解决方案,强烈建议使用该方案。
此外,若上述方案不符合需求,强烈建议创建docker-compose.yml并使用docker-compose运行。
创建Moodle新实例:
... 使用MySQL:
bashdocker run -d --name DB -e MYSQL_DATABASE=moodle -e MYSQL_RANDOM_ROOT_PASSWORD=yes -e MYSQL_ONETIME_PASSWORD=yes -e MYSQL_USER=^数据库用户名^ -e MYSQL_PASSWORD=^数据库密码^ mysql:5.7 docker run -d -P --name moodle --link DB:DB -e MOODLE_DB_HOST=DB -e MOODLE_URL=[***] -p 8080:80 ellakcy/moodle:mysql_maria_apache_^VERSION^
注意 目前由于MySQL用户认证方式,仅支持5.7及更早版本的MySQL。
... 使用MariaDB:
bashdocker run -d --name DB -e MYSQL_DATABASE=^数据库名^ -e MYSQL_RANDOM_ROOT_PASSWORD=yes -e MYSQL_ONETIME_PASSWORD=yes -e MYSQL_USER=^数据库用户名^ -e MYSQL_PASSWORD=^数据库密码^ mariadb:10.2 docker run -d -P --name moodle --link DB:DB -e MOODLE_DB_HOST=DB -e MOODLE_URL=[***] -e MOODLE_DB_TYPE="mariadb" -p 8080:80 ellakcy/moodle:mysql_maria_apache_^VERSION^
注意 基于与MySQL相同的原因,请使用10.2及更早版本的MariaDB。
... 使用PostgreSQL:
bashdocker run --name=DB -e POSTGRES_USER=^数据库用户名^ -e POSTGRES_PASSWORD=^数据库密码^ -e POSTGRES_DB=^数据库名^ -d postgres docker run -d -P --name moodle --link DB:DB -e MOODLE_DB_HOST=DB -e MOODLE_URL=[***] -e MOODLE_DB_TYPE="pgsql" -p 8080:80 ellakcy/moodle:postgresql_apache_^VERSION^
之后可在浏览器中访问以下URL开始使用:
[***]
注意:如需持久化数据,请在数据库和Moodle容器中均使用卷。 注意2:
^VERSION表示Moodle版本。最新LTS版本使用lts,最新非LTS版本使用latest。
FPM解决方案建议使用docker-compose。生产环境推荐使用仓库[***]
可使用以下额外环境变量(通过docker run命令的-e选项):
安装过程中会生成默认用户。请在安装时提供不同的凭据。
| 变量名 | 默认值 | 描述 |
|---|---|---|
MOODLE_URL | [***] | 网站访问URL |
MOODLE_ADMIN | admin | 默认管理员用户名 |
MOODLE_ADMIN_PASSWORD | Admin~1234 | 默认管理员密码 - 生产环境请修改 |
MOODLE_ADMIN_EMAIL | *** | 默认管理员*** |
| 变量名 | 默认值 | 描述 |
|---|---|---|
MOODLE_DB_HOST | 数据库访问URL | |
MOODLE_DB_PASSWORD | 数据库密码 | |
MOODLE_DB_USER | 数据库用户名 | |
MOODLE_DB_NAME | 数据库名 | |
MOODLE_DB_PORT | 数据库访问端口 |
| 变量名 | 默认值 | 描述 |
|---|---|---|
MOODLE_EMAIL_TYPE_QMAIL | false | 是否使用qmail作为邮件传输代理(MTA) |
MOODLE_EMAIL_HOST | SMTP服务器主机。未提供则不发送邮件 |
| 变量名 | 默认值 | 描述 |
|---|---|---|
MOODLE_REVERSE_LB | false | Moodle是否运行在负载均衡器后 |
MOODLE_SSL | false | Moodle是否运行在启用SSL的负载均衡器后 |
可使用以下卷:
如需使用Nginx作为反向HTTP代理,建议使用以下配置:
nginxserver { listen 449 ssl; server_name ^你的域名^; ssl_certificate ^证书路径^; ssl_certificate_key ^密钥路径^; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers HIGH:!aNULL:!MD5; location / { proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_cache_bypass $http_upgrade; # 如需其他端口,请替换以下值 proxy_pass http://^本地URL和端口^; } }
其中:
^你的域名^:Moodle可用的域名,需与MOODLE_URL环境变量的值相同。^本地URL和端口^:反向代理转发请求的URL。^证书路径^、^密钥路径^:证书及其密钥的路径。如上述配置所示,根据此问题,反向代理不提供HTTP Host头。
同时需将Docker环境变量MOODLE_REVERSE_LB和MOODLE_SSL设置为true。
以下内容未处理、未考虑或需要进一步工作:
如遇到以下错误:
UnixHTTPConnectionPool(host='localhost', port=None): Read timed out. (read timeout=60)
请导出以下环境变量:
bashexport DOCKER_CLIENT_TIMEOUT=120 export COMPOSE_HTTP_TIMEOUT=120
本项目是jmhardison/docker-moodle的分支。

manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务