
本Docker镜像专为东非及非洲国家设计,集成了针对这些地区的特定模块,最初开发用于NethServer 8(NS8)的ERPNext模块(https://github.com/geniusdynamics/ns8-erp-next%EF%BC%89%E3%80%82%E8%AF%A5%E9%95%9C%E5%83%8F%E6%8F%90%E4%BE%9B%E5%8F%AF%E5%AE%9A%E5%88%B6%E7%9A%84ERPNext%E9%83%A8%E7%BD%B2%E9%85%8D%E7%BD%AE%EF%BC%8C%E4%BC%98%E5%8C%96%E4%BA%86NS8%E6%A8%A1%E5%9D%97%E7%8E%AF%E5%A2%83%EF%BC%8C%E5%90%8C%E6%97%B6%E4%B9%9F%E9%80%82%E7%94%A8%E4%BA%8E%E9%80%9A%E7%94%A8Docker%E5%9C%BA%E6%99%AF%E3%80%82
apps.json配置文件自动安装自定义Frappe应用ENABLE_AUTO_SITE(布尔值):设为true时,容器启动或执行create-site命令时自动创建站点并安装应用,默认falseSITES(字符串):逗号分隔的站点名称列表(如site1.localhost,site2.example.com),仅在ENABLE_AUTO_SITE=true时生效ADMIN_PASS(字符串):新创建Frappe站点的管理员密码,默认admincommon_site_config.json)以下变量通常由NS8或配置脚本用于填充sites/common_site_config.json,入口点脚本依赖此文件完成站点创建和服务启动:
DB_HOST:MariaDB/PostgreSQL服务器的主机名或IP地址DB_PORT:数据库服务器端口(如MariaDB默认3306)DB_USER:Frappe数据库用户(通常由bench创建)DB_PASSWORD:Frappe数据库用户密码common_site_config.json)REDIS_CACHE:缓存用Redis连接字符串(如redis://redis-cache:6379)REDIS_QUEUE:后台任务队列用Redis连接字符串(如redis://redis-queue:6379)REDIS_SOCKETIO:Socket.IO用Redis连接字符串(通常与REDIS_QUEUE相同)FRAPPE_SITE_NAME_HEADER(字符串):Nginx/代理用于确定请求站点名称的HTTP头(如$host、X-Frappe-Site-Name),多站点设置必备SOCKETIO_PORT(整数):Frappe Socket.IO服务监听端口(如9000)DEBUG_ENTRYPOINT(布尔值):设为true时,入口点脚本(entrypoint.sh)将启用set -x以输出详细调试日志镜像支持在构建时安装自定义Frappe应用,可通过仓库根目录的apps.json文件或指定URL实现。
apps.json在仓库根目录创建apps.json文件,构建过程会自动读取。示例:
json[ { "url": "https://github.com/frappe/erpnext", "branch": "version-15" }, { "url": "https://github.com/genforge/navari_csf_ke", "branch": "develop" }, { "url": "https://github.com/genforge/frappe-mpsa-payments", "branch": "develop" } ]
注:若省略
name字段,将从URL自动提取。确保构建时URL可访问。
APPS_JSON_URL构建参数构建时指定外部apps.json文件URL:
shelldocker build --build-arg APPS_JSON_URL="https://example.com/path/to/apps.json" -t geniusdynamics/erpnext:latest .
APPS_JSON_BASE64构建参数(传统方式)将apps.json内容编码为base64字符串传递:
shellexport APPS_JSON_BASE64=$(base64 -w 0 my_apps.json) docker build --build-arg APPS_JSON_BASE64=$APPS_JSON_BASE64 -t geniusdynamics/erpnext:latest .
应用安装由scripts/install_apps.sh脚本处理,通过bench get-app命令获取并安装应用。若apps.json格式错误,构建将失败。
scripts/entrypoint.sh)镜像使用scripts/entrypoint.sh作为主入口点,行为如下:
sites/common_site_config.json是否包含必要的数据库和Redis信息)ENABLE_AUTO_SITE=true且SITES已定义,通过scripts/create_site.sh创建站点并安装应用bench start,包含Gunicorn Web服务器和后台工作进程)通过docker exec触发站点创建/应用安装:
shelldocker exec <容器名称或ID> create-site
将使用SITES和ADMIN_PASS环境变量。
bench命令执行任意bench命令:
shelldocker exec <容器名称或ID> bench version docker exec <容器名称或ID> bench backup --with-files docker exec <容器名称或ID> bench migrate
配置完成后手动启动服务:
shelldocker exec <容器名称或ID> start # 或直接启动Gunicorn docker exec <容器名称或ID> gunicorn
仓库配置了GitHub Actions工作流(.github/workflows/autobuild.yml),触发条件:
main分支推送(针对Dockerfile、脚本、apps.json等相关文件)工作流会:
linux/amd64、linux/arm64)15.1.0、v15)并推送到Docker Hub(geniusdynamics/erpnext)和/或GitHub Container Registry(ghcr.io/geniusdynamics/erpnext)手动构建命令:
shelldocker build -t geniusdynamics/erpnext:custom .
可通过构建参数自定义:
FRAPPE_BRANCH:指定初始化bench的Frappe分支(如version-15),默认version-15ERPNEXT_VERSION:信息性参数,通常设为目标ERPNext标签,供GitHub Actions使用APPS_JSON_URL:外部apps.json文件URLAPPS_JSON_BASE64:base64编码的apps.json内容示例:
shelldocker build \ --build-arg FRAPPE_BRANCH="version-15" \ --build-arg ERPNEXT_VERSION="v15.10.0" \ --build-arg APPS_JSON_URL="https://example.com/apps.json" \ -t geniusdynamics/erpnext:latest .
docker run示例需提前准备运行中的MariaDB和Redis:
shelldocker run -d \ --name my-erpnext-app \ -p 8000:8000 \ -e ENABLE_AUTO_SITE=true \ -e SITES="myerp.localhost" \ -e ADMIN_PASS="securepassword" \ -e DB_HOST="your_db_host" \ -e DB_PORT="3306" \ -e REDIS_CACHE="redis://your_redis_cache_host:6379" \ -e REDIS_QUEUE="redis://your_redis_queue_host:6379" \ -e SOCKETIO_PORT="9000" \ -e FRAPPE_SITE_NAME_HEADER="myerp.localhost" \ -v erpnext_sites:/home/frappe/frappe-bench/sites \ -v erpnext_logs:/home/frappe/frappe-bench/logs \ geniusdynamics/erpnext:latest
注:完整部署需数据库(MariaDB/PostgreSQL)和Redis实例,仓库中的
docker-compose.yml提供完整示例。
仓库包含docker-compose.yml,用于多容器部署(适用于开发和测试),协调ERPNext应用容器与MariaDB、Redis服务。
使用步骤:
example.env创建.env文件并自定义变量(如SITES、ADMIN_PASS、MYSQL_ROOT_PASSWORD):
shellcp example.env .env # 编辑.env配置
shelldocker-compose up -d
common_site_config.json)入口点需要sites/common_site_config.json包含数据库和Redis信息才能创建站点或启动服务。若文件缺失或信息不全,需通过bench set-config设置:
shell# 等待容器启动后执行 docker-compose exec erpnext bench set-config -g db_host db docker-compose exec erpnext bench set-config -gp db_port 3306 # 确保为整数 docker-compose exec erpnext bench set-config -g redis_cache redis://redis-cache:6379 docker-compose exec erpnext bench set-config -g redis_queue redis://redis-queue:6379 docker-compose exec erpnext bench set-config -g redis_socketio redis://redis-queue:6379 docker-compose exec erpnext bench set-config -gp socketio_port 9000 # 确保为整数
之后触发站点创建:
shelldocker-compose exec erpnext create-site
或重启服务:
shelldocker-compose restart erpnext
CI工作流推送的镜像标签格式:
geniusdynamics/erpnext:<version>(如geniusdynamics/erpnext:15.1.0)geniusdynamics/erpnext:<major_version>(如geniusdynamics/erpnext:v15)GitHub Container Registry地址:ghcr.io/geniusdynamics/erpnext
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。




探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 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 与超大单层
来自真实用户的反馈,见证轩辕镜像的优质服务